ホームページ > バックエンド開発 > C++ > C#で0.09F * 100Fが0.09F * 99.999999Fを超えないように見えるのはなぜですか?

C#で0.09F * 100Fが0.09F * 99.999999Fを超えないように見えるのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-31 04:21:11
オリジナル
512 人が閲覧しました

Why Does 0.09f * 100f Seemingly Not Exceed 0.09f * 99.999999f in C#?

c#フローティングポイント算術:なぜ精度が重要なのか

C#の浮動小数点数は、一般的に使用されますが、予期しない結果を生成できる固有の制限があります。この不正確さを示すケースを調べてみましょう このC#コードスニペットを検討してください:

(0.09
<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f * 100f;
        float f2 = 0.09f * 99.999999f;

        Console.WriteLine(f1 > f2); // Surprisingly outputs "false"
    }
}</code>
ログイン後にコピー
100)が論理的に

(0.09f199.999999999)よりも大きくなるはずであるにもかかわらず、驚くほど「False」を出力します。これは、フローティングポイント表現の固有の制限によるものです。 f2(C#で32ビット)のようなフローティングポイントタイプの精度は限られています。 それらは、有限数の小数桁のみを正確に表すことができます(の場合は約7)。 浮動小数点数を含む計算は、丸めエラーを導入します。これは蓄積され、観察されたような矛盾につながる可能性があります。 この例では、

および

の計算とストレージ中の丸めエラーは、これらの蓄積されたエラーのために、floatよりもわずかに小さいと見なされるようになります。 float浮動小数点精度とその意味を包括的に理解するために、「すべてのコンピューター科学者が浮動小数点算術について知っておくべきこと」という決定的なリソースを参照してください。

以上がC#で0.09F * 100Fが0.09F * 99.999999Fを超えないように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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