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