問題タブ [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.
c++ - 線形代数を扱うのに最適な基底型
プロジェクト用に C++ で小さくて不十分な線形代数ライブラリを作成しています (申し訳ありません)。倍精度数を使用して行列と演算を実装しています。私は正しくやっていますか?代わりにテンプレート クラスを実装する必要がありますか? より正確なタイプはありますか?
floating-point - Fortran 実数リテラル式の接尾辞 'd+0'
以下の M1、M2、および M4 への割り当てで接尾辞「d+0」が何を意味するか知っている人はいますか? または、この情報を見つける可能性が非常に高い Web または本にリソースがありますか?
c++ - double または float を使用する必要がありますか?
C ++で一方を他方の代わりに使用することの利点と欠点は何ですか?
c++ - float と float リテラルの比較で奇妙な出力
なぜ出力not equal
ですか?
なぜこれが起こるのですか?
java - Java で double の代わりに BigDecimal を使用する場合のトレードオフ
私はニューラル ネットワークのコードを書いていますが、やるべきかどうか迷っています。double を使用しても良い結果が得られない可能性があり、コードを C++ などのより効率的な言語に移行する必要があるのではないかと、実際には少し心配しています。ここで、BigDecimal は double よりも 1000 倍遅いという質問を読みましたか? それは沢山。
一方、私は 10 進数で多くの作業を行う予定であり、より正確な数値を使用することは常に良いことです。精度が問題を引き起こす可能性があるかどうかもわかりません。私が見た実装のいずれもそれを行うとは思わないので、おそらくそれを行うつもりはありません。ただし、ネットワークが本来の動作をしないことがあります。それが精度エラーなのか、そのロジックの問題なのかはわかりません。
しかし、皆さんはお金を扱うときだけ BigDecimal を使用しますか? これについて何か考えはありますか?
java - なぜこの方位計算はそれほど不正確なのでしょうか?
それも不正確ですか?私はApfloatの任意精度で全体を再実装しましたが、最初に知っておくべき違いはありませんでした!!
テストの最初のアサーションは次のようになります。
java.lang.AssertionError: 予期:<270.0> でしたが:<270.29389750911355> でした
0.29 はかなり先に見えますか? これは私が実装することを選択した式ですか?
c# - 浮動小数点演算は信頼性が高すぎる
最新のコンピューター システムで実行される浮動小数点演算は、実際の演算と常に一致するとは限らないことを理解しています。これを実証するために、小さな C# プログラムを考案しようとしています。例えば:
ただし、この場合、x
とy
は最終的には等しくなります。
同様の複雑さのプログラムを使用して、本当にクレイジーな数値を使用せずに、浮動小数点演算の矛盾を示すことは可能ですか? 可能であれば、小数点を数桁超える数学的に正しい値を避けたいと思います。
c++ - MacOSXのC++で倍精度を設定するには?
_controlfp( _CW_DEFAULT, 0xffffffff ); を移植しようとしています。WIN32からMac OS X / Intelまで。この命令を移植する方法がまったくわかりません...そしてあなたは?ありがとう!
perl - Fortran は、他の言語と比較して、数値の精度に固有の制限がありますか?
簡単なプログラミング演習に取り組んでいるときに、実変数が正確な値に達したときに終了することを意図した while ループ (Fortran では DO ループ) を作成しました。
精度が使用されているため、等式が満たされず、ループが無限になることに気付きました。もちろん、これは前例のないことではなく、2 つの数値が等しいかどうかを比較するのではなく、2 つの数値の絶対差が設定されたしきい値よりも小さいかどうかを確認することをお勧めします。
残念だったのは、変数が倍精度であっても、ループが適切に終了するために、このしきい値をどれだけ低く設定しなければならなかったかということです。さらに、Perl でこのループの「蒸留」バージョンを書き直したところ、数値の精度に問題はなく、ループは正常に終了しました。
Perl と Fortran の両方で、問題を生成するコードは非常に小さいため、重要な詳細を説明する場合に備えて、ここで再現したいと思います。
Fortran コード
Perl コード
Fortran のコメントアウトされた行は、ループが正常に終了するために使用する必要があるものです。しきい値が 1E-4 に設定されていることに注意してください。
変数の名前は、私が行っていた自習ベースのプログラミング演習に由来するものであり、関連性はありません。
その意図は、速度変数が 1700 に達したときにループが停止することです。
切り捨てられた出力は次のとおりです。
Perl 出力
...
Fortran 出力
...
精度が悪ければ、Fortran の速度と並列化の容易さは何の役に立つでしょうか? 物事を行う3つの方法を思い出します:
正しい道
間違った方法
マックスパワーウェイ
「やり方が間違っているだけじゃないの?」
「うん!でももっと早く!」
冗談はさておき、私は何か間違ったことをしているに違いありません。
Fortran は、他の言語と比較して数値の精度に固有の制限がありますか、それとも (かなりの確率で) 私に問題があるのでしょうか?
私のコンパイラは gfortran (gcc バージョン 4.1.2)、Perl v5.12.1、デュアル コア AMD Opteron @ 1 GHZ です。
.net - TimeSpan と二重丸め誤差
時間、速度、距離などの物理エンティティを処理し、距離 = 時間 * 速度などの簡単な計算を実行しています。速度と距離は 8 桁に丸められた double 値であり、時間値の場合は .NET TimeSpan使用されている。TimeSpan は最も近いミリ秒に丸められるため、丸めエラーが発生するため、すべての計算を最も近いミリ秒に丸めるカスタム丸めメソッドを作成する必要があります。例 (単純化のため、8 桁目への丸めは省略されています):
- Math.Round(d, 6) の使用は分配的ですが、精度が失われます (最大 4 ミリ秒までの精度)
- Math.Round(d, 7) の使用は 1 ミリ秒の精度ですが、分配的ではありません (上の distA は 1.1234511 != 1.123451 になります)。
次の使用 (最も近いミリ秒に丸める) は正しいようですが、丸めコード自体が独自の倍精度エラーを導入します。
/li>
ありがとう、ボリス。