Witam
Mam pytanie odnośnie mojego algorytmu. Proszę mnie nie karcić za wygląd kodu. Wiem że się powtarzają niepotrzebne linie kodu, ale moim celem było zrozumienie jak to się liczy. Czy ten kod pomimo niedoskonałości dobrze reprezentuje liczby float?. Następny krokiem będzie refaktoryzacja kodu.
def printfloat(float):
z = float
dot=''
dot_end=[]
xx=''
y=''
iii=0
menn=''
wynik=''
poj=[]
for i in z:
bity = bin(int(i))
item = bity.index('b')+1
x = xx.join(bity[item:])
dl = len(x)
E = 127 +(dl-1)
bit_int = bin(E)
item_podst = bit_int.index('b')+1
podstawa_y = y.join(bit_int[item_podst:])
zera = len(podstawa_y)
zm_i = i
if 0 < i < 1:
licznik = 0
while zm_i < 1:
zm_i = zm_i * 2
licznik += 1
E = 127 - licznik
bit_int = bin(E)
item_podst = bit_int.index('b')+1
podstawa_y = y.join(bit_int[item_podst:])
zera = len(podstawa_y)
if zm_i // 1 > 0:
ii = zm_i // 1
iii = zm_i - ii
kk = iii
while kk != int(kk):
kk = kk * 2
kkk = kk // 1
kk = kk - kkk
dot_end.append(str(int(kkk)))
dot = dot.join(dot_end[:])
if zera < 8:
men = menn.join('00'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+dot+r*'0')
else:
men = menn.join('0'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+dot+r*'0')
system_hex = hex(int(men,2))
men=''
elif -1 < i and i < 0:
licznik = 0
zm_i = zm_i *(-1)
while zm_i < 1:
zm_i = zm_i * 2
licznik += 1
E = 127 - licznik
bit_int = bin(E)
item_podst = bit_int.index('b')+1
podstawa_y = y.join(bit_int[item_podst:])
zera = len(podstawa_y)
if zm_i // 1 > 0:
ii = zm_i // 1
iii = zm_i - ii
kk = iii
while kk != int(kk):
kk = kk * 2
kkk = kk // 1
kk = kk - kkk
dot_end.append(str(int(kkk)))
dot = dot.join(dot_end[:])
if zera < 8:
men = menn.join('10'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('10'+podstawa_y+x[1:]+dot+r*'0')
else:
men = menn.join('1'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('1'+podstawa_y+x[1:]+dot+r*'0')
system_hex = hex(int(men,2))
men=''
elif i % 1 == 0 and i < 0:
if zera < 8:
men = menn.join('10'+podstawa_y+x[1:])
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('10'+podstawa_y+x[1:]+r*'0')
else:
men = menn.join('0'+podstawa_y+x[1:])
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('1'+podstawa_y+x[1:]+r*'0')
system_hex = hex(int(men,2))
men=''
elif i > 0 and i // 1 == i:
if zera < 8:
men = menn.join('00'+podstawa_y+x[1:])
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+r*'0')
else:
men = menn.join('0'+podstawa_y+x[1:])
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+r*'0')
system_hex = hex(int(men,2))
men=''
elif i % 2 > 0 and i > 0:
if i // 1 > 0:
ii = i // 1
iii = i - ii
kk = iii
while kk != int(kk):
kk = kk * 2
kkk = kk // 1
kk = kk - kkk
dot_end.append(str(int(kkk)))
dot = dot.join(dot_end[:])
if zera < 8:
men = menn.join('00'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+dot+r*'0')
else:
men = menn.join('0'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('00'+podstawa_y+x[1:]+dot+r*'0')
system_hex = hex(int(men,2))
men=''
elif i % 2 > 0 and i < 0 :
if i*(-1) // 1 > 0:
ii = i*(-1) // 1
iii = i*(-1) - ii
kk = iii
while kk != int(kk):
kk = kk * 2
kkk = kk // 1
kk = kk - kkk
dot_end.append(str(int(kkk)))
dot = dot.join(dot_end[:])
if zera < 8:
men = menn.join('10'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('10'+podstawa_y+x[1:]+dot+r*'0')
else:
men = menn.join('1'+podstawa_y+x[1:]+dot)
dl_men = len(men)
if dl_men % 4 > 0:
r = 4 - dl_men % 4
men = menn.join('1'+podstawa_y+x[1:]+dot+r*'0')
system_hex = hex(int(men,2))
men=''
elif i == 0:
system_hex ='0x0'
dot=''
dot_end=[]
item_hex = system_hex.index('x')+1
dl_hex = len(system_hex[item_hex:])
#print(dl_hex)
if dl_hex > 8:
#print('+++++++++')
end_hex_1 = dl_hex - 8
end_hex = dl_hex - end_hex_1+2
wynik = wynik.join(system_hex[item_hex:end_hex])
poj.append(wynik)
elif dl_hex < 8:
wynik = wynik.join(system_hex[item_hex:])
poj.append(wynik)
#print(poj)
#print('**********')
wynik=''
if dl_hex < 8 or dl_hex > 8 :
#print('-----------')
for hh in poj:
u = 0
dl_h = len(hh)
for jj in range(dl_h):
print(hh[jj],end='')
if u%2>0:
print(end=' ')
if jj==dl_h-1:
if dl_h == 1 and hh =='0':
print(' 0 0 0',end=' ')
elif dl_h == 1 or dl_h == 2:
for n in range(5-dl_h):
print('0',end=' ')
elif dl_h == 3 or dl_h == 4:
for n in range(6-dl_h):
print('0',end=' ')
elif dl_h == 5 or dl_h == 6:
for n in range(7-dl_h):
print('0',end=' ')
elif dl_h == 7 :
for n in range(8-dl_h):
print('0',end=' ')
u+=1
print()
wynik=''
lab = []
tab = []
test = int(input())
out = 0
while test > out:
t = input()
tab.append(t.strip(' '))
for j in tab:
tab[out] = float(tab[out])
out += 1
printfloat(tab)