ホームページ > バックエンド開発 > C++ > C#のフローティングポイント計算が不正確なのはなぜですか?

C#のフローティングポイント計算が不正確なのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-31 04:18:08
オリジナル
752 人が閲覧しました

Why Are Floating-Point Calculations in C# Imprecise?

c#

での浮動小数点の不正確さを理解します

フローティングポイント算術の固有の不正確さは、しばしば予期しない結果につながります。 このC#コードスニペットを考えてみましょう:

class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f * 100f;
        float f2 = 0.09f * 99.999999f;

        Console.WriteLine(f1 > f2); // Surprisingly prints "false"
    }
}
ログイン後にコピー

出力「false」は直感に反しています。両方の計算が9.0を生成するように見えるためです。この矛盾は、浮動小数点表現の制限から生じます。

IEEE 754標準の浮動小数点数は、限られた数のビットを使用して分数部分を表します。 これは、多くの小数値を正確に保存できないことを意味します。それらは近似されています。 値0.09fおよび計算の結果は近似です。 これらの近似は、しばしば取るに足らないものですが、予期しない比較を引き起こす可能性があります したがって、

平等の浮動小数点数を直接比較することは信頼できません。 代わりに、許容範囲ベースの比較を使用してください:

== このアプローチでは、

Console.WriteLine(Math.Abs(f1 - f2) < 0.0001); // A more robust comparison
ログイン後にコピー
の絶対差が事前定義されたしきい値(この場合は0.0001)を下回っているかどうかをチェックします。 アプリケーションの必要な精度に基づいてしきい値を調整します 代わりに、

(二重精度の浮動小数点数)を使用すると、f1(単一精度)よりも高い精度が得られ、これらの不正確さの可能性が減ります。 ただし、f2値でさえも、エラーのマージンが少ないにもかかわらず、同様の制限の対象となります。 信頼できるフローティングポイント計算には、精密要件を慎重に検討することが不可欠です。

以上がC#のフローティングポイント計算が不正確なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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