私は浮動小数点数を少し遊んでいますが、過去にそれらについて学んだことに基づいて、最終的には次の0.1 + 0.2
ようなものになるという事実0.30000000000000004
は私を驚かせません。
しかし、私を驚かせるのは、整数演算は常に正常に機能し、これらのアーティファクトがないように見えることです。
私はJavaScript(node.jsのChrome V8)でこれに最初に気づきました:
0.1 + 0.2 == 0.3 // false, NOT surprising
123456789012 + 18 == 123456789030 // true
22334455667788 + 998877665544 == 23333333333332 // true
1048576 / 1024 == 1024 // true
C ++(Mac OS Xではgcc)は同じプロパティを持っているようです。
最終的な結果は、整数がちょうど-より良い言葉がないために-機能するということのようです。10進数を使い始めて初めて、物事が不安定になります。
これは、設計の機能、数学的アーティファクト、またはコンパイラとランタイム環境によって行われる最適化ですか?