問題タブ [rounding-error]
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.
floating-point - 浮動小数点はどのように格納されますか? いつ問題になりますか?
この質問のフォローアップでは、一部の数値は浮動小数点でまったく表現できず、代わりに概算されているようです。
浮動小数点数はどのように格納されますか?
異なるサイズに共通の規格はありますか?
浮動小数点を使用する場合、どのような問題に注意する必要がありますか?
それらは言語間で互換性がありますか (つまり、浮動小数点数を Python プログラムから TCP/IP 経由で C プログラムに送信するには、どのような変換を行う必要がありますか)?
vb.net - vb.net で double の丸め誤差に対処するにはどうすればよいですか?
vb.net を使用して一連の通貨値のバランスをとろうとしています。これら両方の値の合計は double としてキャストされます。状況によっては、丸め誤差が発生します。
これを回避する最善の方法は何ですか? double よりも優先して使用できるタイプはありますか? 結果の値を小数点以下 2 桁に丸めるにはどうすればよいですか?
これが私のコードです - おそらく表示する必要はありませんが、念のために。
numerical-analysis - 特定のマシンで仮数の長さを見つける方法は?
特定のコンピューターで仮数桁数と単位の丸めを見つけたいと思っています。これらが何であるかは理解していますが、それらを見つける方法がわかりません-ただし、コンピューターによって異なる場合があることは理解しています.
エラーの分析など、数値解析の特定の側面を実行するには、この数値が必要です。
私が現在考えているのは、オーバーフローが発生するまで数値をゆっくりとインクリメントする小さな C++ プログラムを作成できるということですが、どのタイプの数値を使用すればよいかわかりません。
私は正しい軌道に乗っていますか?これを正確に計算するにはどうすればよいでしょうか。
java - 1に近い数のかけ算の扱い方
浮動小数点数 (Java double) がたくさんありますが、そのほとんどは 1 に非常に近く、より大きな計算の一部としてそれらを乗算する必要があります。私はこれをたくさんする必要があります。
問題は、Java の double では次のような数値に問題がないことです。
次のようなものを表すことはできません。
この結果、私は急速に精度を失います (制限は、Java の double では約 1.000000000000001 のようです)。
たとえば、1.0001 は 0.0001 として格納されますが、問題は、それらを再度乗算するには 1 を加算する必要があり、この時点で精度が失われることです。
これに対処するには、BigDecimals を使用して計算 (BigDecimal に変換し、1.0 を加算してから乗算) を実行し、その後 double に変換することができますが、これがパフォーマンスに与える影響について深刻な懸念があります。
BigDecimal を使用しないでこれを行う方法を誰でも見ることができますか?
明確にするために編集: これは、勾配降下最適化アルゴリズムを採用する大規模な共同フィルター用です。多くの場合、共同フィルターは非常に小さな数値 (商品の広告をクリックする確率など、1000 分の 1 または 10000 分の 1 など) を処理するため、精度が問題になります。
コラボレーティブ フィルターは、それ以上ではないにしても、数千万のデータ ポイントでトレーニングする必要があるため、速度が問題になります。
sql - sql と clr の丸めの違い
検索しても答えが見つかりません。SQL と CLR の間のデータ型を再確認しましたが、正しいようです。しかし、CLR と SQL を使用すると、異なる結果が得られます。それほど多くはありませんが、ペニーを切るには十分です。そして、それは受け入れられません。
VB.NET での例
1476.34499999999 が表示されます
SQL での例
1476.345000000000000 を返します
一部のドキュメントには VB を使用する必要がありますが、一部のファイル転送には SQL を使用します。これがなぜなのか、誰にも何か提案がありますか?
乾杯
ボブ
gdi - GDIデバイスコンテキストのDPIを指定する
メタファイル(EMF)を生成するアプリケーションがあります。参照デバイス(別名画面)を使用してこれらのメタファイルをレンダリングするため、メタファイルのDPIは、コードが実行されているマシンに応じて変化します。
私のコードが8.5インチx11インチのメタファイルを作成しようとしているとしましょう。開発ワークステーションを参照として使用すると、EMFが次のようになります。
- {0、0、21590、27940}のrclFrame(1000分の1 mm単位のメタファイルの寸法)
- {1440、900}のszlDevice(参照デバイスの寸法(ピクセル単位))
- {416、260}のszlMillimeters(参照デバイスの寸法(mm))
さて、rclFrameはEMFのサイズが
- 21590/2540=幅8.5
- 27940/2540=高さ11
右に。この情報を使用して、計算が正しければ、モニターの物理DPIも決定できます。
- (1440 * 25.4)/ 416=87.9231水平dpi
- (900 * 25.4)/ 260=87.9231垂直dpi
問題
このメタファイルを再生するもの(EMFからPDFへの変換、WindowsエクスプローラーでEMFを右クリックしたときの[概要]ページなど)は、計算されたDPI値を切り捨てて、87.9231ではなく87を表示するようです( 88で十分です)。
これにより、メタファイルの再生時に、物理的なサイズが8.5インチx 11インチ(88 dpiを使用)ではなく、8.48インチx 10.98インチ(87 dpiを使用)になります。
- DPIの計算に使用されるメタファイルに格納されている情報が適切な整数になるように、参照デバイスのDPIを変更することはできますか?
- 独自のデバイスコンテキストを作成してそのDPIを指定できますか?それとも、それを行うために本当にプリンターを使用する必要がありますか?
洞察をありがとう。
c++ - C++ での確率の表現
C++ で 3 つの確率の単純なセットを表現しようとしています。例えば:
(私が知る限り、確率は合計して 1 にならなければなりません)
私の問題は、C++ で 0.7 を float として表現しようとすると、最終的に 0.69999999 になってしまうことです。これは、後で計算を行うときに役に立ちません。0.8、0.80000001 も同様です。
C++ で 0.0 と 1.0 の間の数値を表すより良い方法はありますか?
これは、数値がメモリに格納される方法に関連しているため、値が正しいかどうかをテストする場合、それらがどのように表示/印刷されるかは気にしません。
c# - ToString("f2") の .NET 丸めエラー
こんにちは、私はC#でこのコードを持っています:
そして、C++ のこのコード:
最初のものは3.00を出力します。
2 番目の出力は 2.99です。
なぜこれが起こっているのかわかりません。
アップデート:
Objective-C NSLogも試しましたが、出力は2.99です。
すぐに修正する必要があったため、次の方法を使用しました。
このコードは2.99を示していますが、倍精度で丸めを計算します。Math.RoundF が見つかりません。