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

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

c++ - long double で精度が機能しないか、devcpp が失敗する

私はこれを使用しました:

しかし、いくつかの数字は間違っています。なぜ ?

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

java - Javaで倍精度の問題を修正する方法

重複の可能性:
Javaはフロートして倍増しますが、0.0 +0.1+…+0.1== 0.9000001を回避するにはどうすればよいですか?

Java androidでの二重乗算の精度の問題をどのように克服できますか?文字列値を二重値に変換していることに注意してください。

例:2つのdouble値を乗算する場合:

次の結果が得られます:0.8999999999999999

私が得ている結果のいくつかはです。

0.6 * 3 = 1.7999999999999998;
0.2 * 0.2 = 0.04000000000000001;

上記の結果の代わりに、次の結果を取得したいと思います。

0.3 * 3 = 0.9;
0.6 * 3 = 1.8;
0.2 * 0.2 = 0.04;

私はそれを最も近い整数に丸めようとしているのではないことを覚えておいてください。

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

c - Glib:g_ascii_dtostrは不正確ですか?

「g_ascii_dtostr」(およびdoubleを使用するGKeyFile関数)などの一部のglib関数の動作方法に少し興味があります。

次の行を検討してください。

どの出力

(奇妙な変換は、バッファサイズを十分に高く設定した場合にのみ発生します)

たとえば、ダブル「1.9」をGKeyFileに保存すると、同様のことが起こりますが、結果のファイルでは「1.8999999999999999」として保存されます。どうやら「g_ascii_strtod」を介した変換は無損失であると思われますが、そもそもなぜこの奇妙なことが起こるのか私にはまだ気になります。また、これにより、構成のKey-Valueファイルがかなり醜くなります。

中間の「longdouble」型が使用されていることをどこかで読んだことがあると思いますが、たとえばintからdouble forへの変換では同様の効果がないため、変換された値が「ダーティ」である理由はまだわかりません。おもう。

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

c++ - C++: 倍精度、精度、仮想マシン、および GCC

次のコードがあります。

gcc (4.4、4.5、および 4.6) を使用して O3 でコンパイルし、ネイティブ (ubuntu 10.10) で実行すると、「等しい」という期待される結果が出力されます。

ただし、同じコードを上記のようにコンパイルして仮想マシン (ubuntu 10.10、virtualbox イメージ) で実行すると、「等しくない」と出力されます。これは、O3 フラグと O2 フラグが設定されているが、O1 以下では設定されていない場合です。clang (O3 および O2) でコンパイルし、仮想マシンで実行すると、正しい結果が得られます。

double を使用して 1.1 を正しく表現できないことを理解しており、 「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」を読んだので、そこを指摘しないでください。これは、GCC が行うある種の最適化のようです。どういうわけか、仮想マシンでは機能しないようです。

何か案は?

注: C++ 標準では、この状況での型の昇格は実装に依存すると述べています。GCC は、不等式テストが適用されたときに真を保持する、より正確な内部表現を使用している可能性があります-余分な精度のために?

UPDATE1:上記のコードを次のように変更すると、正しい結果が得られるようになりました。ある時点で、何らかの理由で GCC が浮動小数点制御ワードをオフにしているようです。

UPDATE2:コードの const 式の性質について尋ねる人のために、次のように変更しましたが、GCC でコンパイルするとまだ失敗します。-しかし、オプティマイザーが次のものもconst式に変換している可能性があると思います。

UPDATE3 解決策: virtualbox をバージョン 4.1.8r75467 にアップグレードすると、問題が解決しました。ただし、1 つの問題が残っています。つまり、clang ビルドが機能した理由です。

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

c# - C# で double の引き裂きをシミュレートする

私は 32 ビット マシンで実行していますが、非常に迅速にヒットする次のコード スニペットを使用して、長い値が破損する可能性があることを確認できます。

しかし、ダブルスで似たようなことをしようとすると、引き裂くことができません。誰かが理由を知っていますか?仕様からわかる限り、フロートへの割り当てのみがアトミックです。double への割り当てには、ティアリングのリスクがあるはずです。

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

c++ - 数値比較に影響を与える二重粒度c++

以下は、許容範囲内で2倍の等価性を決定することになっているコードのテストブロックです。

ただし、is_match_2はfalseになり、is_match_1はtrueになります。コンピューターに保存されている数値は目立たない値であり、連続していないことを理解しています。誰かが解決策を共有できますか?私は理にかなった範囲でテストに合格する側で誤りを犯したいと思います。現在の精度に応じてdoubleの値を1ずつインクリメントする方法はありますか(doubleのビットレイアウトに慣れていません)?この粒度の問題を考慮して、許容値をインクリメントするだけかもしれないからです。

編集:

これが実際に実装されると、ユーザーは入力と許容値を定義するので、入力する値に関係なく、期待される出力を提供しようとしています。

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

c# - 画像比率比較の倍精度

私は数学が本当に苦手で、画像のサイズ変更アルゴリズムに問題があります。画像のサイズを特定の比率に変更しようとしています。

問題は、メソッドを実際に機能させるためにトリミングする適切なピクセル数が見つからないように見えることです(ここでAboutEqual見つけました)。失敗して画像が無期限にトリミングされることがあります。メソッドの内部動作をログに記録しようとしましたが、次のように奇妙なことが表示されています。AboutEqual

リンクされた質問には、「xとyの両方が計算値である場合は、イプシロンを増やす必要があります」と書かれています。-どうすればそれを行い、トリミングするのに最適なピクセル数を見つけることができますか?

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

c++ - matlab と c++ の精度

armadilloこんにちは、線形代数と行列のライブラリを使用して、スクリプトを MATLAB から C++ に書き直しています。

多かれ少なかれ同じ出力を得るために、私はcoutメソッドを呼び出しました:

しかし、私は別の結果を得ています:

マトラブの結果:

アルマジロ c++ の結果:

0.039現在、これらの小さな不正確さ (に近い0.041) が、変換された C++ コードのエラーによって引き起こされているのか、g++ と MATLAB の倍精度の通常の違いと見なされるべきなのかはわかりません。

私のコードでは、次のような多くのサイクルを使用しています。

ここxi_summedで、transalpha、およびbは要素ごとの乗算であり、は転置および正規化は、行列配列の合計を にする関数です。arma::mat%mat::t()A1

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

java - Java BigDecimal の精度の問題

次の動作が古い問題であることは知っていますが、まだ理解できません。

または、使用しているにもかかわらずBigDecimal

この結果が:0.30000000000000004ではなく: である理由は0.3?

どうすればこれを解決できますか?