MIT方式の乗算が不正確です。

MIT方式の乗算が不正確です。

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、およびスキームはすべてこの動作を示しています。

おすすめ記事