0

重複の可能性:
JavaScriptの数学は壊れていますか?

...そして私はそれに対して何ができますか?計算後、結果の文字列表現が必要です。そのため、ゼロ(および1)は混乱を招きます。「toFixed()」は、潜在的な結果のすべての(正しい)小数を取得したいので、完全な解決策ではありません。以前は結果(および小数の数)がわかりません。したがって、上記の計算は一例にすぎません。

4

2 に答える 2

2

簡単に言うと、コンピューターは数値を2進数で表すため、10進数のすべてをJavaScriptの数値として完全に表すことはできません。

double(少し)長い答えは、JavaScriptの数値は64​​ビット浮動小数点( Java、C#などの型に相当)であるため、Wikipediaがここで説明しているように、仮数ビットの数が限られているということです。このため、この2進数の精度には制限があります。

例えとして、基数10で分数1/3を表すことを検討してください。使用する桁数が非常に多いとしましょう。つまり、1/3は基数10で表すには無限の桁数が必要なため、1/3を基数10で正確に表すことはできません。同様に、有限のビット数で1/10を完全に表すことはできません 1/10は、正確に表すために無限のビット数を必要とするためです。ここに表示されているのは、コンピューターが限られたビット数で正確に表現できない部分(58/10)であるため、コンピューターは可能な限り接近しています。

于 2012-08-01T06:43:19.543 に答える
0

無限に多くの実数を有限のビット数に圧縮するには、近似表現が必要です。整数は無限にありますが、ほとんどのプログラムでは、整数計算の結果を32ビットで格納できます。対照的に、ビット数が固定されている場合、実数を使用したほとんどの計算では、その数のビットを使用して正確に表すことができない量が生成されます。したがって、浮動小数点計算の結果は、有限表現に戻すために丸められることがよくあります。この丸め誤差は、浮動小数点計算の特徴です。

上記http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.htmlから

于 2012-08-01T06:47:35.000 に答える