問題タブ [double-precision]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - JavaScriptには2倍の浮動小数点数の精度がありますか?
奇妙な質問だとは思いますが、JavaScriptには、シングルフロートではなくダブルフロートを処理する機能がありますか?(64ビットフロート対32ビット。)
mips - 32ビットレジスタを使用した倍精度整数減算(MIPS)
私はコンピューターの算数を学んでいます。私が使っている本(パターソンとヘネシー)には、以下の質問があります。
mipsコードを記述して、64ビットデータの倍精度整数減算を実行します。最初のオペランドがレジスタ$t4(hi)と$ t5(lo)にあり、2番目が$ t6(hi)と$ t7(lo)にあると仮定します。
答えに対する私の解決策は
ただし、この問題の解決策を示した作成者は次のとおりです。
符号付き倍精度整数の場合、
符号なし倍精度整数の場合、
sub/add
との動作の違いについての私の理解はsubu/addu
、オーバーフロー例外はで生成され、では生成されsub/add
ないということですsubu/addu
。オペランドのビットの減算/加算sub/add
とsubu/addu
、符号付きまたは符号なしのオペランドの解釈は、inslt
およびsltu
命令とは異なり、結果に違いはありません。
質問1
私は、オーバーフロー検出が処理されているという解決策を与えられた著者から推測していますが、私の解決策では同じことを考えていませんでした。私は正しいですか?他に足りないものはありますか?
質問2上記の推論が正しいと仮定すると、と
を使用して符号なし倍精度を減算する場合に、作成者が提供したソリューションのオーバーフロー検出がオフになっているのはなぜですか?addu
subu
c# - C#高倍精度
PIの値を計算し、それをdoubleとして返す関数を書いています。ここまでは順調ですね。ただし、関数が小数点以下14桁になると、それ以上保持できなくなります。これは、doubleの精度が限られているためだと思います。小数点以下の桁数を増やし続けるにはどうすればよいですか?
java - float から double への代入
次のコード スニペットを検討してください。
私が得る出力は
浮動小数点数が double 変数に割り当てられたときに近似があるのはなぜですか?
c# - C#のdoubleをsqliteデータベースに保存される値に「トリミング」するにはどうすればよいですか?
たとえばx = 0.56657011973046234
、sqliteデータベースにdouble値を格納し、後でそれを取得すると、が取得されることに気付きましたy = 0.56657011973046201
。sqlite仕様と.NET仕様(どちらも私が最初に読んだことはありません:)によると、これは予想されたものであり、正常です。
私の問題は、高精度は重要ではありませんが、私のアプリは、ユーザーが基本的な3D情報を表すdoubleを入力/選択し、シミュレーションを実行して結果を見つけることを処理することです。そして、この入力はsqliteデータベースに保存して、後で再ロードして再実行することができます。
新しく作成された一連の入力は、保存および再ロードされると(double値が変更されたため)、同じ入力とは明らかに異なる方法でシミュレートされるため、混乱が生じます。これは論理的ですが、望ましくありません。
私はこれにどう対処するかについては完全には理解していませんが、それまでの間、ユーザー入力をsqliteデータベースに正確に格納できる値に制限/クランプしたいと思います。したがって、ユーザーが入力する0.56657011973046234
と、実際にはに変換され0.56657011973046201
ます。
しかし、実際にデータベースに格納してデータベースから取得する以外に、データベースに格納される値を数値で把握することはできませんでした。これは不格好なようです。これを行うための確立された方法はありますか?
floating-point - IEEE-754 浮動小数点精度: どのくらいのエラーが許容されますか?
fdlibmから現在使用しているモデル チェッカー ツール ( cbmcsqrt
) への関数 (64 ビット double 用) の移植に取り組んでいます。
仕事の一環として、ieee-754 規格についてよく読みましたが、基本演算 (sqrt を含む) の精度の保証を理解していなかったと思います。
fdlibm の sqrt のポートをテストすると、64 ビット double で sqrt を使用して次の計算が得られました。
(このケースは、精度に関する私のテストで単純な事後条件を破りました。この事後条件が IEEE-754 で可能かどうかはわかりません)
比較のために、いくつかの多精度ツールは次のように計算しました。
左から 17 番目の数字が異なることがわかります。これは、次のようなエラーを意味します。
質問 1: この膨大な量のエラーは許容されますか?
標準では、すべての基本演算 (+、-、、/、sqrt) は 0.5 ulp 以内である必要があるとされています。これは、最も近い fp 表現に丸められた数学的に正確な結果に等しくなければならないことを意味します (wiki では、一部のライブラリは1 ulp しか保証されませんが、現時点ではそれほど重要ではありません)。
質問 2: すべての基本操作で、64 ビット double (マシン イプシロン) で 2.220446e-16 未満のエラーが発生するということですか?
x86-32 Linux システム (glibc / eglibc) で同じことを計算したところ、fdlibm で得られたのと同じ結果が得られました。
- a: 私は何か間違ったことをしました (しかし、どのように:
printf
候補になるでしょうが、それが理由であるかどうかはわかりません) - b: エラー/精度はこれらのライブラリで一般的です
c++ - C ++:0と0.0の違いは?
0
と0.0
(intとdouble)の違いをよく知っています。
0.
しかし、との間に違いはありますか0.0
(。に注意してください)?
よろしくお願いします、
アクセル
objective-c - NSDate と倍精度の問題
ここにコードがあります
出力は
間隔: 32.456000 32.456000 32455.999970 32456.000000
NSDate が一部の精度を失う値を返すのはなぜですか?
c++ - フロートを正しく標準的に比較する方法は?
新しいプロジェクトを開始するたびに、float 変数または double 変数を比較する必要があるときは、次のようなコードを記述します。
次に、これらの魔法の変数 0.000001 (および double の場合は 0.00000000001) と fabs を取り除きたいので、インライン関数といくつかの定義を記述します。
だから、これを行う標準的な方法があるのだろうか?いくつかの標準ヘッダーファイルでしょうか?float と double の制限 (最小値と最大値) があるとよいでしょう。