mit-schemeの浮動小数点乗算が正確ではないことがわかりました。例えば、
1 ]=> (* 1991.0 0.1)
生産する
;Value: 199.10000000000002
次の数字「2」が奇妙に現れる理由を説明できますか?
ベストアンサー1
覚えておいて、コンピュータはバイナリです。
使用したい2進数に関係なく、0.1の小数値は2進数で正確に表すことはできません。
base2では、1/10は0.0001100110011001100110011...(永久に繰り返されます)
残念ながら、これはバイナリ浮動小数点結果であり、FPUを使用するすべての言語(Pythonなど)は同様の結果を持ちます。
In [1]: 1991.0 * 0.1
Out[1]: 199.10000000000002
In [2]: 0.1 + 0.2
Out[6]: 0.30000000000000004
これはRepresentation error
、小数分数がバイナリ(基数2)分数で正確に表現できないことが多いためです。
Perl、C、C++、Java、Fortran、Python、およびスキームはすべてこの動作を示しています。