ホームページ > バックエンド開発 > C++ > 浮動小数点演算の精度の問題をどのように克服できるでしょうか?

浮動小数点演算の精度の問題をどのように克服できるでしょうか?

Linda Hamilton
リリース: 2024-12-01 00:22:15
オリジナル
773 人が閲覧しました

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

浮動小数点数の精度の問題を克服する

コンピューティングで広く使用されているデータ型である浮動小数点数には、次のような潜在的な精度の問題があります。マシンの本質的な表現に。この問題を説明すると、

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
ログイン後にコピー

このコードでは、str は「4.600」の文字列表現であり、atof(str) を呼び出すとそれが double mw に変換されます。その後の計算では残念な結果が得られます。4.5999999999999996 の浮動小数点表現は、目的の値 4.600 を正確に表すことができません。

問題への対処

解決策で強調されているとおり、浮動小数点演算で正確な等価性を達成することは事実上不可能です。代わりに、許容範囲内で値を比較することが望ましいです。特定のシナリオでは、特定の値を浮動小数点数として正確に表現できないことを認識することが重要です。

推奨リソース

さらに詳しい情報については、次の参考資料を参照してください。

  • [すべてのコンピュータ科学者が浮動小数点について知っておくべきこと算術演算](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [浮動小数点数の比較](https://floating-point-gui.で/)

以上が浮動小数点演算の精度の問題をどのように克服できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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