Javascript浮動小数点演算精度問題の分析と解決


分析
JavaScriptは一つの数字タイプのNumberだけで、しかもJavascriptの中のすべての数字はIEEE-7054標準形式で表しています。浮動小数点数の精度問題はJavaScript特有のものではなく、一部の小数点はバイナリで桁数を表しているので無限です。
十進数           バイナリ0.1              0.0001 1001 1001…0.2              0.0011 0011 0011…0.3              0.0100 1100…0.4              0.0110 0110 0110…0.5              0.0.6              0.1001 1001 1001 1001…
したがって、例えば1.1のように、そのプログラムは実際には‘1.1’を表示することができず、ある程度の正確さしかできません。これは避けられない精度の損失です。
1.09999999999999999
JavaScriptでは問題はもっと複雑です。ここではChromeでテストしたデータだけをあげます。
 入力               出力1.0-0.9==0.1     False 1.0-0.8==0.2     False 1.0-0.7==0.3     False 1.0-0.6==0.4     True 1.0-0.5=0.5     True 1.0-0.4==0.6     True 1.0-0.3==0.7     True 1.0-0.2==0.8     True 1.0-0.1==0.9     True
解決
このような1.0-0.9を避けるにはどうすればいいですか?0.1のバグ型でない問題が発生しますか?浮動小数点演算結果を判断する前に、計算結果を精度縮小するために、現在使用されている多くの解決策を示します。精度が縮小される過程では自動四捨五入が行われます。