Почему 0,1 + 0,2 == 0,3 в C#, когда использовать тип с плавающей точкой

Во многих языках программирования такие операции, как 0,1 + 0,2, не будут равны 0,3, а скорее 0,30000000000000004. И, таким образом, проверки типа 0.1+0.2 == 0.3 вернут ложь.

Насколько мне известно, это связано со стандартом IEE 754, и поэтому он распространен для многих языков.

Такое же поведение можно найти в C#. Я использовал следующий фрагмент кода, чтобы проверить это:

static void Main(string[] args)
    {
        double x = 0.2;
        double y = 0.1;
        double res = 0.3;
        double z = x + y;

        Console.WriteLine("bool result = {0}", z == res); // outputs false
        Console.ReadLine();
    }

но если я использую тот же код, но с переменными с плавающей точкой, все работает по-другому:

static void Main(string[] args)
    {
        float x = 0.2f;
        float y = 0.1f;
        float res = 0.3f;
        float z = x + y;

        Console.WriteLine("bool result = {0}", z == res); // outputs true
        Console.ReadLine();
    }

Кто-нибудь может мне это объяснить?

0 ответов

Другие вопросы по тегам