問題タブ [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.
c++ - double の除算時の予期しない精度の低下
パラメータとして 4 つの double を取り、この指定されたパラメータを使用して次の方法で計算された別の double を返す関数 getSlope があります。
問題は、たとえば次のように引数を指定してこの関数を呼び出す場合です。
返される結果は次のとおりです。
これは私の計算では良い結果ではありません。Mathematica を使用して勾配を計算しましたが、同じパラメータの勾配の結果は次のとおりです。
または精度のために桁数を増やします:
プログラムから返された結果は、その後の計算では適切ではありません。さらに、プログラムが 10.845222072678331 から始まる 10.8557 を返す方法がわかりません (これが除算のおおよその結果であると仮定して)。自分の部門で良い結果を得るにはどうすればよいですか?
前もってありがとう、マダリナ
コマンドラインを使用して結果を出力します。
別のプログラム(グラフを計算するプログラム)からパラメーターを読み取ったため、パラメーターが適切ではない可能性があります。グラフからこのパラメーターを読み取った後、値を確認するために表示しましたが、表示されたベクトルは同じではない可能性があります計算値の内部精度..私はそれが本当に奇妙であることを知りません.いくつかの数値エラーが表示されます..)
パラメータを読み取っているグラフが計算されるとき、C++ で記述された数値ライブラリ (テンプレート付き) が使用されます。この計算には OpenGL は使用されません。
ありがとう、マダリナ
c# - C# で複数の double を追加すると、順序が丸めに影響するのはなぜですか?
次の C# コードを検討してください。
result1 は常に result2 と等しくなければなりませんよね?問題は、そうではないということです。result1 は 3.3 で、result2 は 3.3000000000000003 です。唯一の違いは、定数の順序です。
double は、丸めの問題が発生する可能性がある方法で実装されていることを知っています。絶対精度が必要な場合は、代わりに小数を使用できることを認識しています。または、if ステートメントで Math.Round() を使用できること。私は、C# コンパイラが何をしているかを理解したい単なるオタクです。誰でも教えてもらえますか?
編集:
これまでに浮動小数点演算について読むことを提案したり、CPU が double を処理する方法に固有の不正確さについて話したりしたすべての人に感謝します。しかし、私の質問の要点はまだ答えられていないと感じています。それを正しく表現していないのは私のせいです。次のように言いましょう。
上記のコードを分解すると、次の操作が行われると予想されます。
上記の加算のそれぞれに丸め誤差 (番号 e1..e4) があると仮定しましょう。したがって、r1 には丸め誤差 e1 が含まれ、r2 には丸め誤差 e1 + e2 が含まれ、r3 には e3 が含まれ、r4 には e3 + e4 が含まれます。
さて、丸め誤差がどのように発生するのか正確にはわかりませんが、e1 + e2 が e3 + e4 に等しいと予想していました。明らかにそうではありませんが、それは私にはどういうわけか間違っているようです。もう 1 つのことは、上記のコードを実行すると、丸めエラーが発生しないことです。それが、CPU ではなく、C# コンパイラが奇妙なことをしていると私に思わせる理由です。
私は多くのことを尋ねていることを知っています。おそらく、誰もが与えることができる最良の答えは、CPU 設計で PHD を実行することですが、私は尋ねたいと思いました。
編集 2
元のコード サンプルの IL を見ると、これを行っているのは CPU ではなくコンパイラであることは明らかです。
コンパイラは私のために数字を合計しています!
c++ - C++ double が 64 ビットであることを確認する
私の C++ プログラムでは、外部バイト シーケンスから 64 ビット float を取得する必要があります。コンパイル時に double が 64 ビットであることを確認する方法はありますか? 代わりにデータを保存するために使用する必要がある他のタイプはありますか?
編集: これを読んでいて、実際にIEEE 754 形式でのストレージを確保する方法を探している場合は、以下の Adam Rosenfield の回答をご覧ください。
c - double での整数の表現
double (適切な仮数/指数バランスを持つ、指定されたバイト数の) は、そのバイト数の半分の符号なし整数の範囲を常に完全に正確に保持できますか?
たとえば、8 バイトの double は、4 バイトの unsigned int の数値の範囲を完全に正確に保持できますか?
要するに、2 バイトの float が 1 バイトの unsigned int の範囲を保持できるかどうかです。
もちろん、1 バイトの unsigned int は 0 -> 255 になります。
floating-point - 単精度浮動小数点演算と倍精度浮動小数点演算の違いは何ですか?
単精度浮動小数点演算と倍精度浮動小数点演算の違いは何ですか?
私は、ビデオ ゲーム コンソールに関連する実用的な用語に特に興味があります。たとえば、Nintendo 64 には 64 ビット プロセッサが搭載されていますか?搭載されている場合、それは倍精度浮動小数点演算が可能だったことを意味しますか? PS3 と Xbox 360 は、倍精度の浮動小数点演算を実行することも、単精度のみを実行することもできます。また、一般的に使用されるのは倍精度機能です (存在する場合)。
floating-point - 16 ビット、32 ビット、および 64 ビットの IEEE-754 システムで表現できる数値の範囲は?
浮動小数点数の表現方法については少し知っていますが、十分ではありません。
一般的な質問は次のとおりです。
特定の精度 (私の目的では、基数 10 の正確な小数点以下の桁数) で、16 ビット、32 ビット、および 64 ビットの IEEE-754 システムで表現できる数値の範囲は?
具体的には、+/-0.5 (一の位) または +/- 0.0005 (千の位) の精度の 16 ビットおよび 32 ビットの数値の範囲にのみ関心があります。
c# - 倍精度
私はコードを持っていますが、それを理解していません。精度が非常に重要なアプリケーションを開発しています。しかし、それは.NETにとって重要ではありません、なぜですか?知らない。
しかし、メッセージボックスには次のように表示されます。3.5助けてください、ありがとう。
floating-point - 浮動小数点方程式の再調整
傾きの計算精度を上げる方法があれば教えてください。(これはここ数ヶ月前に出てきました)。
それは変更することによって思われます:
に
改善かもしれません。提案?
編集:私が求めているのは精度であり、効率ではありません。
c - WindowsのCのスリープ機能。より精度の高い関数はありますか?
ミリ秒の入力を取り、入力が経過時間の最小量であることのみを保証する Sleep() 以外に、c のウィンドウで使用できるより良いスリープ関数を誰かが知っているかどうか疑問に思っていました。私は 1 ミリ秒で通過していますが、実際には 15 ~ 16 ミリ秒の遅延が発生しています。指定されたスリープ時間を正確に設定する方法はありますか?