問題タブ [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.

0 投票する
2 に答える
1984 参照

floating-point - 二重値の範囲とステップを検証する

double値が最小値、最大値、およびステップ値で定義された範囲のメンバーであることを検証するアルゴリズムを構築しようとしています。問題は、値がステップルールに従っていることを確認することです。整数の場合、これは簡単に実行できます。

ただし、これはdouble値では機能しません。これは少なくとも部分的には精度の理由によるものであることを私は知っており、すべての値に非常に大きな数値を掛けてそれらをlongに変換することにより、ソリューションをハッキングしようとしました。ただし、これはすべての値に対して機能するわけではなく、残りをチェックするときに0からのわずかな逸脱も許可しませんでした。誰かがこの問題を抱えていて、良い解決策を思いついたことがありますか?以下は、機能しない検証方法を特徴とする例とテストです。

これを行う1つの方法は、最小値から開始し、入力値以上になるまで段階的にインクリメントすることですが、醜い解決策になることを除けば、これは私のアプリの潜在的なボトルネックになる可能性があります。本当に避けたいです。

私はどんなポインタにも感謝しています...

よろしく/ヘンリック

}

0 投票する
1 に答える
145 参照

sql-server - 結果に不一致があるのはなぜですか?

fibonaciシリーズを見つけるためにBinetFormulaとRecursiveFormulaを適用すると、結果に不一致が生じます。なんで?

基本的に私は学生であり、フィボナッチ数列を実装するのが私たちの任務です。それで、実験をしている間、私はこの状況に出くわしました。

前もって感謝します

0 投票する
16 に答える
1630 参照

c++ - (1 + sqrt(2))^2 = 3 + 2*sqrt(2) は、浮動小数点演算で満たされますか?

数学では、恒等式(1 + sqrt(2))^2 = 3 + 2*sqrt(2)が成り立ちます。しかし、浮動小数点 (IEEE 754、単精度、つまり 32 ビットを使用) 計算ではsqrt(2)、2 進数で正確な表現がないため、そうではありません。

では、近似値を使用sqrt(2)すると、左側と右側で異なる結果が得られるのでしょうか? もしそうなら、なぜですか?近似値を 2 乗すると精度が大幅に低下しますか?

同等の式のうち、最も正確な結果が得られるのはどれですか?

0 投票する
7 に答える
1329 参照

haskell - なぜghciは1.1+1.1 + 1.1> 3.3が真であると言うのですか?

私は最近Haskellチュートリアルを行ってきましたが、インタラクティブghciシェルでいくつかの単純なHaskell式を試したときにこの動作に気づきました。

誰かがそれがなぜであるか知っていますか?

0 投票する
3 に答える
733 参照

optimization - (速度ではなく)精度のために浮動小数点演算を最適化するコンパイラーはありますか?

コンパイラーがコードの最適化と実行速度の向上にますます優れていることはわかっていますが、私の質問は、浮動小数点演算を最適化して精度を高めることができるコンパイラーです。

たとえば、基本的なルールは、加算の前に乗算を実行することです。これは、浮動小数点数を使用した乗算と除算では、加算と減算ほどの不正確さは発生しませんが、加算と減算によって発生する不正確さの大きさが増加する可能性があるためです。多くの場合、最初に実行します。

したがって、次のような浮動小数点演算

に変更する必要があります

上で示したように、速度を犠牲にして浮動小数点の精度を向上させるために最適化するコンパイラはありますか?それとも、浮動小数点演算の精度を見ずにコンパイラの速度を上げることの主な関心事ですか?

ありがとう

更新:選択された回答は、このタイプの最適化が機能しない非常に良い例を示しているため、コンパイラーはyを評価するためのより正確な方法を事前に知ることはできません。反例をありがとう。

0 投票する
4 に答える
2427 参照

perl - Perl で同じ浮動小数点数をそれ自体から減算するとゼロにならないのはなぜですか?

重複の可能性:
C# の浮動小数点演算が不正確なのはなぜですか?
なぜ ghci は 1.1 + 1.1 + 1.1 > 3.3 が True だと言っているのですか?

驚くべきことに、出力は最終的に

ZEROじゃないはず???? どなたか説明していただけないでしょうか......

0 投票する
7 に答える
114979 参照

floating-point - 浮動小数点の不正確さの例

浮動小数点の不正確さを、コンピュータは無限に賢明で正確だといまだに考えている新米プログラマーや素人にどう説明しますか?
正確ではあるが無味乾燥な説明よりも、アイデアをうまく​​伝えていると思われるお気に入りの例や逸話はありますか?
これはコンピュータ サイエンスの授業でどのように教えられていますか?

0 投票する
5 に答える
3577 参照

c++ - float の桁数のカウント

私は c++ での OpenGL の初心者向けチュートリアルに従っていますが、ac# プログラマーとして始めたので、多くのことを当然のことと考えてしまいました。そのため、FPSの読み取り値を出力にデバッグ印刷しているときに問題が発生しました。メソッドは頭のてっぺんから DebugPrintString のようなもので、char* を受け取り、基本的に「FPS: x」を出力していたと思います。scanf_s を使用して fps 値を文字配列に配置していましたが、ここに問題があります。文字配列の大きさはどのくらいですか?

もう少し詳しく説明しましょう。通常、フレーム/秒は適切な数値ではないため、私の FPS の読み取り値は float として保存されます。つまり、私の番号は 60 かもしれませんし、59.12345 かもしれません。60 には 2 バイトしか必要なく、59.12345 には 8 (ピリオドに 1) が必要です。それで、「ああ、桁数を数えなければならない、問題ない!」と思いました。男の子は私がショックを受けていました。

桁数を数える方法を作成しました。小数点以下の左側を数えるのは簡単でした。まず、整数としてキャストして小数点を削除し、10 で除算します (実際には、ビットシフトがあったと思います)。 0 になるまで何回できるかを数えます。右辺の桁を数えます。10 を掛けて、その桁を引きます。これを 0 になるまで繰り返します。このメソッドは通常 32 を返します。それで、私はWTF'dしてデバッグでそれを見ました.浮動小数点数を掛けると、よく知られている精度の問題のために数字の列を効果的に上に移動すると、別の数字が追加されたことがわかりました!

私はいくつかの主要なグーグルを行いましたが、実際には char str[128] と scanf if in then do strlen(str) - 1 (null ターミネータ) の上に何も見つかりませんでした。しかし、私はよりエレガントなソリューションを望んでいました。最後に、それをintとしてキャストし、9999 fpsに十分な値を許可し、fps> 9999かどうかを確認するチェックも追加しましたが、それが起こるとは思いません. SEG FAULTよりも安全です:(

TLDR: float の桁数を取得する方法はありますか? scanf はどのようにそれを行いますか?!

長い投稿で申し訳ありませんが、私の欲求不満を共有したかっただけです >:D

編集:スペルミス

0 投票する
5 に答える
4861 参照

floating-point - 文字列を完全な精度で浮動小数点数に変換する方法は?

C の strtold への呼び出しを置き換えるために、D プログラミング言語で関数を作成しようとしています。(理論的根拠: D から strtold を使用するには、D 文字列を C 文字列に変換する必要がありますが、これは非効率的です。また、コンパイル時に strtold を実行することはできません。)最下位ビットの精度がいくらか失われるようです。

アルゴリズムの興味深い部分のコードを以下に示します。精度の低下の原因はわかりますが、それを取り除く方法はわかりません。(読みやすくするために、コア アルゴリズムに関係のないコードの多くの部分を省略しました。) string-to-float アルゴリズムは、結果が IEEE 番号にできるだけ近いことを保証します。行を文字列で表される値に変更します。

また、古いバージョンの単体テストを使用しています。これは次のようなことを行いました。

私の関数によって生成される答えは、浮動小数点リテラルを解析するときにコンパイラが生成する表現よりも実際には正確である可能性がありますが、コンパイラ (C++ で記述されている) は常に strtold と正確に一致します。浮動小数点リテラル?

0 投票する
2 に答える
1817 参照

graphics - シェーダーベースのマンデルブロ エクスプローラーのビッグ フロート

Open Gl と NVidia が提供する CGFX SDK を使用して、単純なマンデルブロ エクスプローラーを作成することができました。うまく機能しますが、現在はフロートベースであるため、「深さ」はあまりありません。最小の複素数から最大の複素数までの距離が小さくなると、精度が失われ、結果の画像が「ピクセル化」されます。

残念ながら、CGFX は倍精度をサポートしていないようで、それでも私の意図では倍精度は制限されています。CGFX は意図された設計であるため、bignum クラスを持たないため、独自に作成するのが最善であると考えました。

符号なし整数のみを使用する C++ でプロトタイプを作成することができましたが、それを CGFX に移動しようとすると、FX Composer 2.5 はそれをコンパイルできなかったようです。符号なし整数、乗算、および加算のみを使用しているため、コードには多くのビットシフト操作が含まれていますが、FX Composer 2.5 によると、私のプロファイルでは使用できません。

この質問には多くのクエリが含まれていることは知っていますが、残念ながら、数値解析、シェーダー プログラミング、またはオープン GL についてはあまり詳しくありません。この時点で、圧倒されているように感じます。また、リークを修正しようとしていることは確かです。スレッジハンマーで。

したがって、これらの質問のいずれかに対する回答があれば、感謝します。

  1. CGFX、またはその他のシェーダー言語は、符号なし整数と浮動小数点数のビットシフト演算子をサポートしていますか (浮動小数点数を大きな浮動小数点数に変換するために必要です)?

  2. CGFX やその他のシェーダー言語は、倍精度以上の浮動小数点をサポートしていますか?

  3. 大きな浮動小数点クラスを作成するのではなく、私の問題に対処するより洗練された数学的な方法はありますか?

もう少し説明が必要な場合やコード スニペットが必要な場合は、お気軽にお問い合わせください。