計算中に精度を維持するために float 値を 10 倍にスケーリングすると、常に正確になりますか?
この質問は、関係する数がより小さいかより大きい場合Math.pow (2,53)
にのみ適用されます。Math.pow (10,-15)
Math.pow (10,16 ) > Math.pow (2,53)
これでいくつかの点が明確になることを願っています
0.3 - 0.2 //0.09999999999999998
明らかに不正確です
しかし、スケーリングされた数値で減算を行う
var a = 0.3;
var b = 0.2;
var l = Math.max ("".split.call(a,".")[1].length,"".split.call(b,".")[1].length);
var c;
a *= Math.pow (10,l);
b *= Math.pow (10,l);
c = a-b;
c /= Math.pow(10,l);
console.log(c); //0.1
「正確 な」 結果が得られます。
質問は、上記の基準に一致する float 値はありますかf<Math.pow(10,-15)
? 10 のべき乗(ここでMath.pow ( 10 , n<16)<Math.pow(2,53)
)を掛けると、N(b)-N(a)にならない? 10の累乗?double value nearest
上記のスニペットで説明したように。
これは単なる興味の問題であり、実際の計算にこれを使用することについてではありません。ただ興味があります
誤解を恐れずに言います この説明は苦手です