Download Initiation à l`algorithmique
Transcript
3.4. EXERCICES COMPLÉMENTAIRES # calcul du signe sign = int(x < 0) # calcul de la mantisse i = 0 significand = [] while (x_int != 0) and (i < k_significand): significand.insert(0,x_int%2) x_int = x_int/2 i = i + 1 if len(significand) > 0 and significand[0] == 1: del significand[0] expo_2 = len(significand) i = len(significand) while (x_frac != 0) and (i < k_significand): x_frac = x_frac * 2 x_int = int(x_frac) x_frac = x_frac - x_int if (x_int == 0) and (i == 0): expo_2 = expo_2 - 1 else: significand.append(x_int) i = i + 1 if abs(x) < 1 and len(significand) > 0 and significand[0] == 1: del significand[0] expo_2 = expo_2 - 1 for i in range(len(significand),k_significand): significand.append(0) # calcul de l’exposant exponent = code(abs(expo_2),2,k_exponent) if expo_2 >= 0: exponent = add2(bias,exponent) elif expo_2 < 0: exponent = sub2(bias,exponent) 143 # calcul du code IEEE 754 simple précision if x == 0.0: ieee_code = [] for i in range(k_ieee): ieee_code.append(0) else: ieee_code[0] = sign ieee_code[1:9] = exponent ieee_code[9:32] = significand return ieee_code #----------------------------------------------def sub2(code1,code2): """ substract = sub2(code1,code2) soustraction binaire substract = code1 - code2 """ assert type(code1) is list assert type(code2) is list assert len(code1) == len(code2) substract = [] for i in range(len(code1)): append(substract,0) carry = 0 for i in range(len(code1)-1,-1,-1): if code1[i] < (code2[i] + carry): substract[i] = code1[i] + 2 - (code2[i] + carry) carry = 1 else: substract[i] = code1[i] - (code2[i] + carry) carry = 0 return substract