Deduzi o seguinte algoritmo para a expanção de uma fração para binário:
Suponha que desejamos obter a expanção binária \(e\) de 0.3. Procedemos assim:
Então \(e_0=0\).
Então \(e_1=0.0\)
Então \(e_2=0.01\), e guardamos o total representado até agora \(\Sigma=0.25\) e a diferença \(\Delta = 0.3-\Sigma = 0.05\).
Então \(e_3 = 0.010\)
Então \(e_4=0.0100\)
Então \(e_5 = 0.01001\) e fazemos \(\Sigma \leftarrow \Sigma+0.03125 = 0.28125\) e \(\Delta = 0.3 - \Sigma = 0.01875\).
E assim por diante.
Segue uma função que expande o float \(x \in (0,1)\) em \(n\) casas decimais.
def exp_bin(x, n):
out = '0.'
sum = 0
for i in range(n):
valor_casa = 1/(2**(i+1))
if x - sum >= valor_casa:
out = out + '1'
sum += valor_casa
else:
out = out + '0'
return out