問題タブ [floating-accuracy]
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.
c# - 数値が正しく丸められないのはなぜですか?
これは、その場でしか失敗しない種類のコードのように感じますが、私はそれを私が見ているものを表すコードスニペットに適合させようとします。
コードをステップスルーした後、i == 269、およびi2==268。違いを説明するためにここで何が起こっているのですか?
c++ - c ++浮動小数点の精度の低下:3015 / 0.00025298219406977296
問題。
Microsoft Visual C ++ 2005コンパイラ、32ビットWindows XP SP3、AMD 64 X2 CPU
コード:
計算結果(つまり「f」)は11917835.000000000(((unsigned __int64)(&f))== 0x4166bb4160000000)ですが、11917834.814763514(つまり((unsigned __int64)(&f))== 0x4166bb415a128aef)である必要があります。
つまり、小数部分が失われます。
残念ながら、正確にするために小数部分が必要です。
質問:
1)なぜこれが起こるのですか?
2)どうすれば問題を解決できますか?
追加情報:
0)結果は「ウォッチ」ウィンドウから直接取得されます(印刷されなかったため、印刷精度を設定することを忘れませんでした)。浮動小数点変数の16進ダンプも提供したので、計算結果は間違いありません。
1)f = a/bの分解は次のとおりです。
2)f = 3015 / 0.00025298219406977296; 正しい結果が得られます(f == 11917834.814763514、((unsigned __int64)(&f))== 0x4166bb415a128aef)が、この場合、結果はコンパイル時に単純に計算されるように見えます。
では、どうすればこの問題を解決できますか?
PS一時的な回避策を見つけました(除算の小数部分のみが必要なので、現時点ではf = fmod(a / b)/ bを使用しています)が、この問題を適切に修正する方法を知りたいです-倍精度は小数点以下16桁であると想定されているため、このような計算で問題が発生することはありません。
visual-c++ - x87 FPU 制御ワードのデフォルト設定を決定するものは何ですか?
x87 FPU 制御ワード、具体的には精度制御フィールドのデフォルト設定を決定するものは何ですか? コンパイラはターゲット プロセッサに基づいて設定しますか? それを変更するコンパイラオプションはありますか?
Intel Core Duo プロセッサで Microsoft Visual C++ 2008 Express Edition を使用する場合、精度制御フィールドのデフォルト設定は「01b」で、倍精度 (53 ビット) を意味します。私は疑問に思っています-なぜデフォルトが「11」bまたは拡張(64ビット)精度ではないのですか?
(_controlfp を使用して変更できることはわかっています。)
c++ - Visual C++ の浮動小数点精度
こんにちは、
Jonathan Richard Shewchuk による計算幾何学の堅牢な述語を使用しようとしています 。
私はプログラマーではないので、何を言っているのかよくわかりません。基本的な間違いをしている可能性があります。
ポイントは、述語が適応浮動小数点精度で正確な算術演算を許可する必要があることです。私のコンピューター: Asus pro31/S (Core Due Centrino Processor) では動作しません。問題は、私のコンピュータが浮動小数点精度の改善を使用している可能性があり、Shewchuk で使用されているものと競合する可能性があるという事実にとどまる可能性があります。著者は次のように述べています。
今私が知りたいのは、内部の拡張精度浮動小数点レジスタをオフにする方法、おそらく何らかのコンパイラ オプションがあるということです。
私は本当にあなたの助けに感謝します
floating-point - 固定小数点から浮動小数点へ、およびその逆
固定ポイントを変換しています。(小数部の固定 n ビット) IEEE ダブルセーフ ?
つまり、IEEE double 形式は、固定小数点が表すことができるすべての数値を表すことができますか?
テスト: 数値は浮動 pt 形式になり、元の固定 pt 形式に戻ります。
c - 誤ったVisualCフロート/二重変換?
Visual C ++では、C++プログラムで次のサンプルを作成しました。
Visual Studio2005を使用してプログラムをコンパイルしました。デバッガーに次の値が表示されます。
私の知識によるd1は問題ありませんが、d2は間違っています。
この問題は、/ fp=fastの場合と同様に/fp=strictの場合にも発生します。
ここで問題は何ですか?この問題を回避するためのヒントはありますか?これは深刻な数値問題につながります。
floating-point - xx == 0 が false である x の浮動小数点値はありますか?
ほとんどの場合、浮動小数点比較テストは値の範囲 (abs(xy) < epsilon) を使用して実装する必要があることは理解していますが、自己減算は結果がゼロになることを意味しますか?
私の推測では、nan/inf は特殊なケースかもしれませんが、単純な値の場合に何が起こるかにもっと興味があります。
編集:
誰かが参照 (IEEE 浮動小数点標準) を引用できる場合は、喜んで回答しますか?
floating-point - 「イプシロン」は浮動小数点計算で本当に何かを保証しますか?
a / (b - c)
問題を簡潔にするために、s の式を計算したいとしましょうfloat
。
結果が意味のあるものであることを確認するために、b
とc
が等しいかどうかを確認できます。
しかし、私のテストでは、意味のある結果を保証することも、可能であれば結果を提供することに失敗しないことも保証できないことが示されています。
ケース 1:
結果: if 条件は満たされませんが、式は正しい結果 100000008 を生成します (float の精度に関して)。
ケース 2:
結果: if 条件は満たされていますが、式は意味のある結果を生成しません+1.#INF00
。
引数ではなく、結果を確認する方がはるかに信頼性が高いことがわかりました。
しかし、イプシロンは何のためにあり、イプシロンが使いやすいと誰もが言っているのはなぜですか?
c - このフロートの値が設定された値から変更されるのはなぜですか?
この C プログラムが「間違った」出力を出すのはなぜですか?
出力:
しかし、出力は12345.054321
.
VS2008 で VC++ を使用しています。
c# - 浮動小数点の精度はスレッドに依存できますか?
double を基本単位として使用する構造体に基づく C# 3.0 の小さな 3D ベクトル クラスがあります。
例: 1 つのベクトルの y 値は
の y 値を持つベクトルを減算します。
私が期待する y の値は
代わりに私は得る
計算全体を 1 つのスレッドで実行すると、(1) が得られます。また、デバッガーと VS クイック ウォッチは (1) を返します。しかし、あるスレッドでいくつかの反復を実行し、別のスレッドから関数を呼び出すと、結果は (2) になります。これで、デバッガーも (2) を返します!
.NET JIT が値をメモリ (Web サイト Jon Skeet) に書き戻す可能性があることに留意する必要があります。これにより、精度が 80 ビット (FPU) から 64 ビット (double) に低下します。ただし、(2) の精度はそれをはるかに下回ります。
ベクトルクラスは基本的に次のようになります
計算はこれくらい簡単