Найти тему

Компьютер не умеет складывать 0,1 + 0,2: и это могут использовать против вас

Оглавление

Недавно пришлось столкнуться с дробями в программировании. Казалось бы, банальная операция 0,1 + 0,2 должна давать однозначный ответ. Но, факты поразили: у железного ящика свои понятия о числах. Он выдает удивительные значения.

1. Двойка

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

Ну и ладно! – скажете вы. – Какая разница?

Мир глазами компьютера
Мир глазами компьютера

Отвечаю: результаты арифметических действий у железного товарища могут вас несколько удивить, если вы столкнетесь с вещественными числами.

Лично я никогда не задумывался об этом, пока один знакомый программист не показал интересный пример.

2. Пример

Итак, суть примера представлена на картинке.

Я уже не уверен
Я уже не уверен

Нужно банально сложить 0,1 и 0,2. Каждый школьник моментально скажет ответ: 0,3. И будет прав, если честно. А вот персональный компьютер ведет себя подозрительно.

Вводим те же числа: получаем 0,3. Возникает вопрос: в чем подвох? Результаты же совпали!

Для начала товарищ решил меня спросить, равно ли сложение двух чисел (0,1 + 0,2) тому самому варианту 0,3? Нервы мои начали сдавать: сколько можно издеваться? Конечно, равны!

А теперь спросим у программы: уважаемая софтинка, 0,1 + 0,2 будет ли равно 0,3? И, знаете, что ответил мне железный монстр? Он сказал: НЕТ!

3. Странно всё это

Это как так: 0,3 не равно 0,3? Что за бред!

Тут мы затеяли еще один эксперимент: добавили кучу нулей.

Результат сложения поразил: откуда в самом конце вычисления появилось число 4?

Откуда 4-ка в конце?
Откуда 4-ка в конце?

Оказывается, все дело именно в системах счисления. Мне стали объяснять, что ПК работает только со степенями двойки и каждое число пытается представить в таком виде (я ничего не понял, просто кивал).

Именно поэтому, 0,1 + 0,2 не равно 0,3 со 100%-ной точностью. Оно почти равно этому значению…

4. Жизнь

Казалось бы, какое все это имеет отношение к жизни? А вы вспомните о том, что все структуры финансового характера пользуются программами. А те, следовательно, могут творить с числами непонятные вещи.

Предположим, вы положили в банк 17900 руб. под 13 % годовых. Через год вам должны (проверяем на бумажке) уже 20227 руб. Но, товарищ компьютер выдает такое число: 20226.999999999996. Как вы понимаете, доли копеек вам никто давать не будет. Поэтому данная сумма превратится в 20226 руб. 99 копеек.
Пример из жизни
Пример из жизни

Оп, 1 копейку своровали, гады. Мелочи? Согласен. Но, операций по стране ежедневно проводится миллионы. А за год сколько наберется?

Вот я и задумался: а в банках, например, как считают? Как надо или как выгодно им? Ответа у меня нет.

Кстати, обычный калькулятор считает правильно.

--

Иногда в жизни сталкиваешься со странными открытиями. И пока космические корабли бороздят околоземную орбиту, на поверхности планеты числа ведут себя очень подозрительно.

Спасибо за внимание. Подписывайтесь

Windows
66,2 тыс интересуются