を使用して10進数を整数にするトリックがあることを私は知っていますx|0:
例えば :
3.14|0 -->3
ここには丸めは含まれていません:
3.999 |0 -->3`
質問
しかし : なぜ
9.99999999999|0収量9
その間
9.9999999999999999|0利回り10?
を使用して10進数を整数にするトリックがあることを私は知っていますx|0:
例えば :
3.14|0 -->3
ここには丸めは含まれていません:
3.999 |0 -->3`
質問
しかし : なぜ
9.99999999999|0収量9
その間
9.9999999999999999|0利回り10?
9.9999999999999999小数が多すぎて Javascript 表現の精度が失われ、10 になります。これをテストできます
9.9999999999999999 === 10:true
Firefox のソース コードを調べる必要がありますが、いくつかのサンプルを試すのは興味深いことです。
>>> 9.99999999999999999.toString(2)
"1010"
>>> 9.9999999999999999.toString(2)
"1010"
>>> 9.999999999999999.toString(2)
"1001.1111111111111111111111111111111111111111111111111"
>>> 9.999999999999999.toString(2).length
54
>>> 9.99999999999999.toString(2)
"1001.111111111111111111111111111111111111111111111101"
>>> 9.99999999999999.toString(2).length
53
概算: 約 49 ビットが仮数部に入り、符号と指数用に 15 ビットが残ります。
更新: comp.lang.javascript の FAQ で興味深いエントリを見つけました。http: //www.jibbering.com/faq/#FAQ4_7 を参照してください。double 型の精度が 53 ビットに制限されています。
ビットごとの論理演算または演算の前に double を 32 ビット int に変換するステップで精度が使い果たされると思います。