問題タブ [floating-point-comparison]
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.
r - 同一(x、y)とisTRUE(all.equal(x、y))の違いは何ですか?
isTRUE(all.equal(x, y))
テストとの違いはありますidentical(x, y)
か?
ヘルプページには次のように書かれています。
「if」式で「all.equal」を直接使用しないでください。必要に応じて「isTRUE(all.equal(....))」または「identical」を使用してください。
しかし、その「適切な場合」には疑問が残ります。2つのうちどちらが適切かをどのように判断しますか?
python - pandas 列の float を比較する
次のデータフレームがあります。
actual_credit >= min_required_credit を示す列を追加する必要があります。結果は次のようになります。
私は次のことをしています:
ただし、3 行目 (0.4 および 0.4) は常に False になります。次のようなさまざまな場所でこの問題を調査した後: Python で浮動小数点数がほぼ等しいかどうかを比較する最良の方法は何ですか? 私はまだこれを機能させることができません。2 つの列の値が同じ場合、結果は正しくない False になります。
私はpython 3.3を使用しています
floating-point - 浮動小数点数を比較する方法の違い
2 つの浮動小数点数が同一かどうかを判断するには、多くのアプローチがあるようです。ここに私が見つけたいくつかの例があります:
fabs(x - y) < n * FLT_EPSILON * fabs(x)
またfabs(x - y) < n * FLT_EPSILON * fabs(y)
fabs(x - y) < n * FLT_EPSILON * fabs(x + y)
fabs(x - y) < n * FLT_EPSILON * fabs(x + y) || fabs(x - y) < FLT_MIN)
fabs(x - y) / sqrt(x * x + y * y + FLT_EPSILON * FLT_EPSILON) < n * FLT_EPSILON
私はそれらについて本当に混乱しています。2 つの浮動小数点数を比較する最良の方法があり、それが最も高速で最も正確であると仮定すると、他のアプローチは存在しません。したがって、これらのさまざまな方法には、それぞれ長所と短所があるはずです。
私の質問は次のとおりです。最速/最も正確/最も実用的なアプローチはどれですか?
参照リンク:
http://accu.org/index.php/journals/1558 (1 と 4)
https://stackoverflow.com/a/10335601/5399734 (2 および 3)
明確化: 少なくとも、「最速/最も正確」は主に意見に基づくものではないと思います。
python - Python で同じ値を持つ 2 つの属性型「float」と「int」を比較すると「False」になるのはなぜですか?
以下のコードを考えてみましょう
コード:
出力:
しかし、行のコードを に変更11
するfoo = Foo(2)
と、出力は次のようになります。
a = 2.0 b = 2 "a == b" -> False
出力が完全に奇妙であることがわかります。Python の OOP の概念を誤解している可能性があると思います。この予期しない出力が発生した理由と、この問題を解決する方法を教えてください。
c++ - 高価な計算をキャッシュするための浮動小数点の等価性
浮動小数点数は実数ではないため、別々の計算で生成された 2 つの浮動小数点数が正確に等しいと期待することの危険性について、すでに多くの質問と回答があります。この質問は、等価性チェックを条件とする正確性に関するものではなく、それに基づくキャッシュに関するものです。
次のコードがあるとします。
この場合、等値比較は、冗長な作業を避けるために純粋に存在します。入力が変更されていない場合、コストのかかる計算を再度実行することは避けています (コストのかかる関数は決定論的であり、他の入力が変更されていないと仮定します)。
2 つが実際には等しい (つまり、浮動小数点ではなく実数で計算できた場合に等しくなる) が、そうでないと誤って検出された場合、最悪の場合、高価な計算を重複して実行しますが、プログラムの答えは依然として正しいです。私の知る限り、float のメモリ表現よりも広いレジスタで計算が行われた場合 (たとえば、80 ビットの fp レジスタが有効な場合の 32 ビット x86)、メモリ表現に変換された後に、それらが誤って等しいと比較される可能性があります。両方がビットごとに等しくなるようにします。その場合、違いはメモリ表現の精度を超えている必要があります。これは、私にとって重要な比較のためにイプシロン未満でなければなりません。
したがって、この浮動小数点の等価性の使用は安全であると断言します。最初の質問は、私が間違っているのでしょうか?
第 2 に、安全であると仮定した場合、誤って true を返すことは避けたいと思います。これは、コストのかかる計算を引き起こすためです。メモリ表現よりも幅の広いレジスタを持つマシンでそれを回避する 1 つの方法は、 memcmp を使用して強制的にメモリ表現を比較することです (NaN のセマンティクスはまったく同じではありません。ただし、キャッシングの場合は改善されます。または、+0 と -0 の場合は特殊なケースになる可能性があります)。ただし、その memcmp は、レジスタでの浮動小数点比較よりも遅くなります。プラットフォームがより広いレジスタを持っていることを検出する方法はありますか?
python - 一度に2つの数値的近さの複数のリストを比較する方法は?
4 つのリストがあるとします。
1) A、BB、CC、DA、C などのリストを比較し、2) 要素が +/-0.2 の場合に true を返すにはどうすればよいですか?
私の考えでは、リストに for ループを追加して、すべてを反復処理することです。
しかし、もしそうなら、私は立ち往生しています
明らかにうまくいきません。重複せずにリストを反復処理し、同時に比較する方法はありますか?
前もって感謝します