-5

次のような投稿を見てきました。

float と double の比較で最も効果的な方法は何ですか?

2 つのフロートを比較する

その他、関連記事多数。

私はd3jsライブラリで見ましたが、次の比較を使用しています:

  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;

これを C/C++ で と の比較に使用してもよろしいdoubleですfloatか?

4

6 に答える 6

7

次のコードで十分ですか?

いいえ。

そうでない場合、なぜですか?

==それは(少なくともエッジ以外のケースでは)と同じだからです。

于 2013-03-22T20:38:18.757 に答える
2

a または b のいずれかが NaN の場合に true を返すため、これは十分ではありません。

于 2013-03-22T20:37:43.863 に答える
0

許容値と比較するという考え方は、ほとんど同じである 2 つの値を同じと見なしたい場合があるということです。と がある場合、それらは等しくなければなりませんか2.000000000000? 2.000000000001それらがそうである場合、コードは失敗します。

于 2013-03-22T20:39:23.213 に答える
0

あなたの間違いは、次の記事を読んだことです。

   diff = A - B;
   return (diff < EPSILON) && (-diff > EPSILON);

そして、あなたはEPSILON = 0それを入れて、

if (!(a > b) && !(a < b))

EPSILONと考えるべきではありません0。ビットエラーは float/double 比較であると考える必要があるため、これを と呼びますEPSILON

于 2013-03-22T20:43:58.483 に答える
0

あなたは本当にこのドキュメントを読む必要があります:

https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf

これは Golberg の論文です = すべてのプログラマーが浮動小数点について知っておくべきことです。

于 2013-03-22T21:03:19.040 に答える