浮動小数点数の精度の問題を克服する
コンピューティングで広く使用されているデータ型である浮動小数点数には、次のような潜在的な精度の問題があります。マシンの本質的な表現に。この問題を説明すると、
#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 を正確に表すことができません。
問題への対処
解決策で強調されているとおり、浮動小数点演算で正確な等価性を達成することは事実上不可能です。代わりに、許容範囲内で値を比較することが望ましいです。特定のシナリオでは、特定の値を浮動小数点数として正確に表現できないことを認識することが重要です。
推奨リソース
さらに詳しい情報については、次の参考資料を参照してください。
以上が浮動小数点演算の精度の問題をどのように克服できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。