ホームページ > バックエンド開発 > C++ > 精度の損失を考慮しながら浮動小数点値を正確に比較するにはどうすればよいでしょうか?

精度の損失を考慮しながら浮動小数点値を正確に比較するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-12-25 07:48:33
オリジナル
798 人が閲覧しました

How Can Floating-Point Values Be Compared Accurately While Accounting for Precision Loss?

精度を維持した浮動小数点値の比較

浮動小数点の比較では、精度の低下により問題が発生します。 == を使用して double または float を単純に比較することは信頼できません。

イプシロンベースの比較

1 つのアプローチでは、精度の損失を考慮してイプシロン (ε) しきい値を使用します。

bool CompareDoubles2(double A, double B) {
  double diff = A - B;
  return (diff < EPSILON) && (-diff < EPSILON);
}
ログイン後にコピー

ただし、このアプローチは次のとおりです。

コンテキスト依存の考慮事項

比較方法の選択は、コンテキストと期待値によって異なります。次の潜在的な落とし穴を考慮してください:

  • a == b および b == c と仮定すると、a == c が暗示されます。
  • 異なる測定単位に同じイプシロンを使用します。
  • 角度と線の長さの両方にイプシロンを使用します。
  • このような比較を使用した並べ替えfunction.

Standard Epsilon

std::numeric_limits::epsilon() は、1.0 と double で表現できる次の値との差を表します。 。比較関数で使用できますが、期待値が 1 未満の場合に限ります。

整数演算の結果

整数値を保持するために double を使用すると、正しい値が得られる可能性があります。算術では、整数の範囲外の分数や値は避けられます。たとえば、4.0/2.0 は 1.0 1.0 と等しくなります。

以上が精度の損失を考慮しながら浮動小数点値を正確に比較するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート