JavaSctript で信頼できる数値の範囲

JavaScript’s Defects on Numbers
 
Eclipse の Java2Script Pacemaker プラグイン開発者のブログより、
0×20000000000000 (54ビット)を超える値は信用できないよ、という記事。
以下ほぼ原文訳。


テストスクリプト:

javascript:alert (0x1ffffffffffffe);
javascript:alert (0x1fffffffffffff);
javascript:alert (0x20000000000000);
javascript:alert (0x20000000000001);

上記のテストスクリプトを実行すると、最後の二つの値が全く同等になることが確認できます(Firefox 2.0, IE 6.0 で確認)。
 
結論として、安全な数値範囲は -0x1fffffffffffff(-9007199254740991) から 0x1fffffffffffff(9007199254740991)までの範囲(正負それぞれ53ビット)です。Java から JavaScript への変換で、Java の long 値を JavaScript の数値に変換する時は演算結果が正しくなくなることがあります。
 


上の記事では J2S についてのみ書かれてるのだと思いますが、GWT でも該当するかもしれません。