2

Javascriptは、Windowsの「conn」フォルダのような10100401822940525を使用できません。なぜjsはこの番号で失敗するのですか?

例を確認できます、

http://jsfiddle.net/ymutlu/yCpWh/1/

4

3 に答える 3

4

IEEE 浮動小数点型の数値では、数値が大きくなるほど、数値間のギャップが大きくなります。数値がどのように格納されているかを見ると、それは理にかなっています。

負でない指数と負でない指数を持つ可能な値が同量存在することを考慮してください。つまり、1 から無限大までの数と同じ数の 0 から 1 までの数が存在するということです。明らかに、1 と Infinity の間の数字はさらに離れています。この間隔は実際には分散されているため、0 から遠ざかるほど、格納される可能性のある数値間のギャップが大きくなります (実際の最大数はありません。最終的には、無限大と区別できる数値がなくなるだけです)。

これは実際には非常にうまく機能します。なぜなら、ほとんどの場合、大きな数値を扱うときはあまり精度を必要としないからです。10100401822940524との差は、数値のサイズに比べてと10100401822940526の差よりもはるかに重要ではありません。数値よりも数値を表現できることがはるかに重要であり、64 ビットに制限されています。13210100401822940525

于 2012-05-25T15:07:31.863 に答える
1

これは、浮動小数点丸めのインスタンスです。JavaScriptの数値は、倍精度浮動小数点数として保存されます(AFAIK)。浮動小数点数は精度が限られているため、数値が大きくなりすぎると正確な整数として格納できなくなり、丸めが必要になります。

これは別の例ですが、より大きなエラーがあります。http://jsfiddle.net/NhZ75/

なぜこの計算が機能するのか疑問に思っているのであれば、ほとんどのコンピューターが格納する精度よりも高い精度で浮動小数点演算を行うためです。したがって、丸め誤差は通常、数値を変数に格納するときにのみ発生します。

于 2012-05-25T15:03:58.930 に答える
1

私はこれを見つけました: http://gskinner.com/blog/archives/2011/03/the-case-of-the-disappearing-number.html

彼が正しいかどうかはわかりませんが、合理的に聞こえます。;)

于 2012-05-25T14:59:24.267 に答える