Beispiel #1
0
def mult(op0,op1,outpar):
    multiplicand=int(op0,2)
    multiplicand=twos_comp(multiplicand,len(op0))
    multiplier=int(op1,2)
    multiplier=twos_comp(multiplier,len(op1))
    product=multiplicand*multiplier
    return printer_2s(product,outpar)+'\n'
Beispiel #2
0
def arithAbsDiff(infile1, infile2, outfile, num_line):
    with open(infile1,
              "r") as fin1_pointer, open(infile2, "r") as fin2_pointer, open(
                  outfile, "w") as fout_pointer:
        for i in range(0, num_line):
            line1 = fin1_pointer.readline()
            line2 = fin2_pointer.readline()
            num1 = twos_comp(int(line1, 2), len(line1))
            num2 = twos_comp(int(line2, 2), len(line2))
            abs_dist = num2 - num1
            fout_pointer.write(str(abs_dist) + '\n')
Beispiel #3
0
def mult_trunc_pp (op0,op1,outpar,lsbs):
    if len(op0)!=len(op1):
        DADDALEVELS=int(input("How many DADDALEVELS should I set?\n"))
    else:
        DADDALEVELS=len(op0)/2 + 1
    multiplicand=int(op0,2)
    multiplicand=twos_comp(multiplicand,len(op0))
    multiplier=int(op1,2)
    multiplier=twos_comp(multiplier,len(op1))

    # Initialize pp matrix
    pp=[]
    i=0
    inv=0

    # Calculating partial products
    while i < DADDALEVELS-1:
        recode_ctr=recode_calculator(op1,i)
        pp.append((pp_calculator(multiplicand,recode_ctr)<<(2*i))+inv)
        inv=inv_evaluator(recode_ctr)<<(2*i)
        i+=1
    pp.append(inv)

    # Truncating LSBs if requested

    ending_str='0'*lsbs
    i=0
    while i<DADDALEVELS:
        original_str=printer_2s(pp[i],outpar)
        new_str=original_str[0:len(original_str)-lsbs]+ending_str
        new_num=int(new_str,2)
        pp[i]=twos_comp(new_num,len(new_str))
        i+=1
    # Summing pp
    i=0
    product=0
    while i<DADDALEVELS:
        product=pp[i]+product
        i+=1

    # Writing result
    return printer_2s(product,outpar)+'\n'
log_file = open(FLOG_NAME, "w")
DIRECTORY = os.fsencode("common/")
for F_NAME in os.listdir(DIRECTORY):
    filename = F_NAME.decode("utf-8")
    if (".txt" in filename) and ("pyresult" in filename):
        result_file = open(FOUT_NAME.format(0), "r")
        approx_file = open("common/" + filename, "r")
        max_aerror = 0
        max_rerror = 0
        avg_asum = 0
        avg_rsum = 0
        j = 0
        while j < NUM_SAMPLES:
            r_line = result_file.readline()
            e_line = approx_file.readline()
            r_num = twos_comp(int(r_line, 2), len(r_line))
            e_num = twos_comp(int(e_line, 2), len(e_line))

            abs_error = r_num - e_num
            rel_error = abs(abs_error) / r_num

            avg_asum = avg_asum + abs_error
            avg_rsum = avg_rsum + rel_error
            if abs(abs_error) > abs(max_aerror):
                max_aerror = abs_error
            if abs(rel_error) > abs(max_rerror):
                max_rerror = rel_error
            j += 1

        avg_abs = avg_asum / j
        avg_rel = avg_rsum / j
Beispiel #5
0
    else:
        return(0)


in_file=open(FIN_NAME,"r")
if len(sys.argv)>1:
    out_file=open(FOUT_NAME+"_a"+sys.argv[1]+".txt","w")
else:
    out_file=open(FOUT_NAME+".txt","w")

for line in in_file:

# Reading operands
    nums=line.split()
    multiplicand=int(nums[1],2)
    multiplicand=twos_comp(multiplicand,len(nums[1]))
    multiplier=int(nums[0],2)
    multiplier=twos_comp(multiplier,len(nums[0]))

# Initialize pp matrix
    pp=[]
    i=0
    inv=0

# Calculating partial products
    while i < DADDALEVELS-1:
        recode_ctr=recode_calculator(nums[0],i)
        pp.append((pp_calculator(multiplicand,recode_ctr)<<(2*i))+inv)
        inv=inv_evaluator(recode_ctr)<<(2*i)
        i+=1
    pp.append(inv)
Beispiel #6
0
#!/bin/python3

FIN_NAME = "common/samplesE.txt"
FOUT_NAME = "common/pyresult.txt"

OUTPAR = 47

in_file = open(FIN_NAME, "r")
out_file = open(FOUT_NAME, "w")

from bin_lib import twos_comp, printer_2s

for line in in_file:
    nums = line.split()
    multiplicand = int(nums[0], 2)
    multiplicand = twos_comp(multiplicand, len(nums[0]))
    multiplier = int(nums[1], 2)
    multiplier = twos_comp(multiplier, len(nums[1]))
    product = multiplicand * multiplier
    out_file.write(printer_2s(product, OUTPAR) + '\n')