-1

2 つの浮動小数点数が同一かどうかを判断するには、多くのアプローチがあるようです。ここに私が見つけたいくつかの例があります:

  1. fabs(x - y) < n * FLT_EPSILON * fabs(x)またfabs(x - y) < n * FLT_EPSILON * fabs(y)

  2. fabs(x - y) < n * FLT_EPSILON * fabs(x + y)

  3. fabs(x - y) < n * FLT_EPSILON * fabs(x + y) || fabs(x - y) < FLT_MIN)

  4. 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)


明確化: 少なくとも、「最速/最も正確」は主に意見に基づくものではないと思います。

4

1 に答える 1

2

最速で最も正確なのはx == y. 計算が正確であることがわかっている状況でよく使用します。場合によっては、特定のアプリケーションの必要に応じて数値の 1 つを丸めてから、正確な比較を行います。

これまでは、あなたの質問の複雑な表現を使用する必要はありませんでした。しかし、繰り返しになりますが、「実際の計算」を行っていないだけかもしれません。

于 2016-03-24T07:51:23.167 に答える