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'
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')
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
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)
#!/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')