2016-10-17 26 views
2

私はポートにJavaScriptにPythonライブラリをしようとしたが、両者の間の数値の差につまずいていますPythonのではビット単位のシフト精度

、1057618395136 >> 16 == JavaScriptで16137976 、1057618395136 >> 16 == 16120

私はJavascriptの整数精度を53ビット、Math.pow(2、53)== 9007199254740991であると読んでいます。これはまだbifshift操作の範囲にあります。私は行方不明ですか?

答えて

4

JavaScriptのビット演算子は、浮動小数点値を32ビット整数に切り捨てます。したがって、64ビットの浮動小数点値で53ビットの整数を保持できるのは正しいですが、シフト演算子では53ビットすべてを利用することはできません。

JavaScriptで16ビット右にシフトするには、65536で分けることができます。

+0

ありがとうございます! 好奇心から(私はそのような極小最適化が無視できることを知っています)、ビットシフトと除算の間にパフォーマンスに違いがありますか? – Martijnh

+0

@Martijnh JavaScriptランタイムは、2のべき乗の定数で除算しているという事実を認識している可能性があります。ローエンドの電話を除いて、ほとんどの現代のハードウェアはおそらく64ビットのシフト演算を行うことができます。どのような実際の実装であれ、私は分かりません。 – Pointy

関連する問題