明らかに、JavaScriptの数字は明示的に型付けされていませんが、インタプリタによって型として表現されます。私はちょうどそれが32ビットの数に大きく最適化されていると言ったGoogleのV8 JSエンジンに関することを見たが、それは浮動小数点でも倍精度浮動小数点数の必要性を持っている奇妙な多くのJSプログラマーを見つけた。私が個人的に考えることのできる唯一の例は、0と1の間のスクリーン座標を正規化するために頻繁に行う2つの整数を分割する場合です。インタープリタは結果を32ではなく64ビットで切り捨てます。私には、しかし、再び私は他の誰かがそのような精度を必要とするそれを指定する方法を知らない。だから今私は疑問に思っています... 2つの(巨大ではない)整数の商が32ビット長以下であることを保証する方法はありますか?JavaScriptでは、浮動小数点数が32ビット以下になるようにするにはどうすればよいですか?
答えて
私はちょうど大幅にのみ、それは彼らがすることを推測することができたときにV8が内部で整数としてこれらの数字を格納しないことを意味32ビット数
用に最適化されていますと、GoogleのV8 JSエンジンについての事を見ましたそれぞれの範囲にとどまる。これは、カウンタや配列インデックスなどでよく使用されます。
2つの(巨大ではない)整数の商が32ビット未満であることを保証する方法はありますか?
すべての算術演算は、64ビットの浮動小数点数(JS内のすべての数値など)と同じように実行されます。あなたができることは、結果を32ビット整数に切り捨てることだけです。あなたは、内部で整数にそのオペランドをキャストされ、そのためにbitwise right shift operatorを使用します:
var q = (a/b) >>> 0;
詳細についてはWhat is the JavaScript >>> operator and how do you use it?を参照してください。
私はそれを32に切り捨てるかどうかに関わらず、コンパイラはそれを二重として扱いますと思っていますか? –
@Sophia:それはコンパイラがどれほど巧妙であるかによって異なります。言語仕様の点では、yes - double型に分割され、次に整数にキャストされ、その後に戻されます。それは、おそらく最も速い通訳がやっていることでしょう。最適化コンパイラ、またはasm.jsコンパイラ[might](http://stackoverflow.com/q/31767070/1048572)は、整数ですべてを行うことを決定します(全体の動作が同じである限り)。 – Bergi
私はv8コマンドラインでそれをテストすることができますが、私の理解ではインラインキャッシングを使用しています。まずコードを実行してから*戻って、可能な限り最適化します。これは、コンパイラがいくつかのコードでしか動作しない、つまり壊れる可能性のあるエッジケースがあると言う理由です。したがって、商を32に切り捨てるとより速くなると仮定します。 –
- 1. CIImageを32ビット/チャンネルの浮動小数点ピクセルバッファにレンダリングするにはどうすればよいですか?
- 2. 浮動小数点数を制限値以下にクリップするにはどうすればよいですか?
- 3. スペースがないときに浮動小数点数を強制的にリサイズするのではなく、浮動小数点数を浮動小数点以下の表の下に移動するにはどうすればよいですか?
- 4. 浮動小数点型の列の小数点以下の桁数はどのように数えますか?
- 5. バイナリ浮動小数点を10進小数に変換するにはどうすればよいですか?
- 6. 32ビット浮動小数点数をIEEE 80ビットに変換
- 7. 小数点以下の桁数をテンプレートの小数点以下の桁数にするにはどうすればよいですか?
- 8. 浮動小数点数に0を追加するにはどうすればよいですか?
- 9. n個の小数点以下の桁数を持つ浮動小数点数をcoutにどのように
- 10. Androidで2小数点以下の倍数を印刷するにはどうすればよいですか?
- 11. 浮動小数点数をHTMLで正しく配置するにはどうすればよいですか?
- 12. 2つの16ビット整数(上位ワード/下位ワード)を32ビット浮動小数点に変換するには?
- 13. 関数が整数または浮動小数点数を扱えるようにするにはどうすればよいですか?
- 14. MySQL - 小数点以下の桁数を更新するにはどうすればよいですか?
- 15. 浮動小数点数を文字列に変換するにはどうしたらよいですか?第6小数点以下 -
- 16. FreeFem ++で1.56783のような浮動小数点数を1.567にするには
- 17. ARMv7 32ビットで浮動小数点レジスタをスタックにプッシュ(ポップ)する方法は?
- 18. 小数点以下の桁をjavascriptの上付き文字のように見えるようにするにはどうすればよいですか?
- 19. 未設定の浮動小数点と値が0の浮動小数点を区別するにはどうすればよいですか?
- 20. 円で小数点以下を浮動小数点に変換する
- 21. mit-schemeで浮動小数点数を返すにはどうすればよいですか?
- 22. C#(NFop)でXSL-FOで浮動小数点を使用するにはどうすればよいですか?
- 23. 浮動小数点数を小数点以下の桁数に拡張する
- 24. 価格を小数点以下2桁にフォーマットするにはどうすればよいですか?
- 25. NSNumberを浮動小数点に変換するにはどうすればよいですか?
- 26. 自動浮動小数点プレースホルダのバグを削除するにはどうすればよいですか?
- 27. JavaScriptで32ビット浮動小数点数または64ビット長を実装していますか?
- 28. Pythonで小数点以下の桁をシフトするにはどうすればよいですか?
- 29. toLocalStringで小数点以下2桁の値を取得するにはどうすればよいですか?
- 30. Realm jsで浮動小数点のリストを指定するにはどうすればよいですか?
すべてのJavaScriptの数値は、倍精度浮動小数点値です。いくつかの計算*は内部的に整数計算で実行されるかもしれませんが、(型付き配列に格納された値以外の)数値は倍精度であり、型付き配列であっても値が式に抽出されるとすぐに倍になります。 – Pointy
V8について見たリファレンス(または「もの」)へのリンクを投稿できると便利です。 – Pointy
現代のランタイムは、特定の式に整数だけが含まれるかどうかを判断するために、いくつかの静的コード分析を実行する(または少なくとも* can *)と言ってもいいと思います。通常は、変数が参照されるときに 'n | 0'のように役立つ記号のセットがあります。それはあなたの情報源が話していたものかもしれません。通常は、かなり稀なパフォーマンスクリティカルなコードに対しては、メンテナンスするのが難しいために行われます。 – Pointy