Descobri que a multiplicação de ponto flutuante no mit-scheme não é precisa, por exemplo,
1 ]=> (* 1991.0 0.1)
vai produzir
;Value: 199.10000000000002
Você poderia, por favor, ajudar a explicar a aparência do estranho número à direita “2”?
Descobri que a multiplicação de ponto flutuante no mit-scheme não é precisa, por exemplo,
1 ]=> (* 1991.0 0.1)
vai produzir
;Value: 199.10000000000002
Você poderia, por favor, ajudar a explicar a aparência do estranho número à direita “2”?
Lembre-se de que os computadores são binários,
Não importa quantos dígitos de base 2 você deseja usar, o valor decimal 0,1 não pode ser representado exatamente como uma fração de base 2.
Em base2 1/10 é 0,0001100110011001100110011... (repetindo indefinidamente)
Infelizmente, isso é resultado de ponto flutuante binário, e qualquer linguagem que use o FPU terá resultados semelhantes, como o Python.
Isso ocorre
Representation error
porque muitas vezes as frações decimais não podem ser representadas exatamente como frações binárias (base 2).Perl, C, C++, Java, Fortran, Python e esquema demonstrarão esse comportamento.
Esta citação é de memória e provavelmente não está correta, mas transmite a essência do problema: "Operar com números de ponto flutuante é como mover pilhas de areia: toda vez que você faz isso, perde um pouco de areia e ganha um pouco de sujeira" (de "Elementos de estilo de programação" IIRC de Kernighan e Plauger). Toda linguagem de programação tem esse problema.