JavaScript で 53 ビット精度よりも高い数値を表す方法はありますか? つまり、64 ビット精度の数値を表す方法はありますか?
64 ビット数値の各ビットが何かを表すロジックを実装しようとしています。2^53 よりも高いビットを設定しようとすると、下位ビットが失われます。
Math.pow(2,53) + Math.pow(2,0) == Math.pow(2,53)
これを達成するためにカスタムライブラリまたは何かを実装する方法はありますか?
JavaScript で 53 ビット精度よりも高い数値を表す方法はありますか? つまり、64 ビット精度の数値を表す方法はありますか?
64 ビット数値の各ビットが何かを表すロジックを実装しようとしています。2^53 よりも高いビットを設定しようとすると、下位ビットが失われます。
Math.pow(2,53) + Math.pow(2,0) == Math.pow(2,53)
これを達成するためにカスタムライブラリまたは何かを実装する方法はありますか?
Google の Closure ライブラリには、この目的のためにgoog.math.Longがあります。
GWTチームは、長いエミュレーションサポートを追加したため、Javalongは実際には64ビットを保持します。64ビットの浮動小数点数または整数が必要ですか?
おそらく、技術的な詳細を追加する必要がありました。基本的に、GWT long エミュレーションは 2 つの数値のタプルを使用します。1 つ目は 64 ビットの長さの上位 32 ビットを保持し、2 つ目は下位 32 ビットを保持します。
ライブラリにはもちろん、2 つの「long」を追加して「long」の結果を取得するなど、追加するメソッドが含まれています。GWT Java コード内では、2 つの通常の long のように見えます。一方は、いじったり、タプルを意識したりする必要はありません。このアプローチを使用することで、GWT は、おそらくあなたが暗示している問題、つまり、多くの場合受け入れられない精度の下位ビットを削除する「ロング」を回避します。
float は定義上、値の不正確/近似ですが、long のような整数はそうではありません。GWT は常に 64 ビットの長さを保持します。そのような長さを使用する数学では、精度は使用されません。これに対する例外はオーバーフローですが、64 ビット以上を必要とする 2 つの非常に大きな long 値を追加するときに Java などで発生するものと正確に一致します (例: 2^32-1 + 2^32-1)。
浮動小数点数に対して同じことを行うには、同様のアプローチが必要になります。タプルを使用するライブラリが必要になります。
整数の配列または文字列のいずれかを使用するだけです。
JavaScript の数値は double です。数式に丸め誤差が含まれていると思います。
次のコードはうまくいくかもしれません。ただし、まだテストしていません: BigDecimal for JavaScript
はい、11 ビットは指数用に予約されており、小数とも呼ばれる値を含むのは 52 ビットのみです。Javascript では数値のビット単位の操作が可能ですが、Javascript の標準仕様に従って、これらの操作では最初の 32 ビットのみが使用されます。
私は誤解を招く GWT/Java/Javascript/二重質問での長い回答を理解していませんか? Javascript は Java ではありません。
javascript で 64 ビット精度が必要なのはなぜですか?
long は DB 内の ID を保持することがあるため、下位ビットの一部を失わないことが重要ですが、ほとんどの場合、計算には浮動小数点数が使用されます。float を使用して金銭的または同様の厳密な値を保持することは、明らかに間違っています。本当に64ビットの精度が必要な場合は、サーバーで計算を実行してください。サーバーの方が高速です。