Sabia que:
0.0000001 x 0.0000002 = 0.000000000000019999999999999997
??
(Clique nos anúncios para ajudar à produção de conteúdo, obrigado)
Se a matemática se considera uma ciência exacta, já o cálculo matemático em computadores por vezes tem as sua limitações.
Em números inteiros não há um problema aparente, nem nos decimais, mas quando estamos no campo dos números muito grandes ou muito pequenos, vêm acima as limitações do cálculo
Veja o exemplo, da soma de dois números decimais com "valor" na 7ª casa decimal:
number1 = 0.0000001
number2 = 0.0000002
O programa em Python para devolver a soma destes dois números seria:
sum = number1 + number2
print(sum)
E o resultado:
3e-07
É um resultado em número de vírgula flutuante, usando a notação científica. Assim mesmo percebemos que o resultado é 3 ... ou melhor 0.0000003 até aqui tudo bem. Agora se formatarmos o resultado da soma, a variável sum para que nos dê o resultado com a aproximação a 10 decimais, com o código:
print(" %6.10f " % sum)
O resultado é:
0.0000003000
Que está correcto. O problema real começa a surgir quando ultrapassamos o limite de armazenamento que o computador tem para os números em vŕigula flutuante (e claro o resultado de operações entre eles). Estes números têm de ser convertidos do sistema decimal para o binário, e têm ainda a limitação intrínseca da capacidade de o computador armazenar:
O sinal do número
O expoente
A mantissa
Há limitações próprias das arquitecturas de 32 bits ou 64 bits, bem como das normas ou do tipo de máquina.
Assim se aumentarmos a representação do resultado da soma para 25 dígitos à direita da vírgula (ponto) obtemos agora:
0.0000002999999999999999864
0.000000000000019999999999999997
Comentários
Enviar um comentário
Obrigado pelo seu contacto.