Почему компьютеры плохо справляются с математикой?


Несколько дней назад, экспериментируя с JavaScript, я обнаружил нечто странное, поэтому провел небольшое исследование и нашел ответы.
Я пишу эту статью в надежде, что некоторые из вас найдут ее полезной или узнают что-то новое.

Раньше я считал, что компьютеры лучше людей разбираются в математике, пока не попробовал сложить 0.1 + 0.2 и получил результат 0.30000000000000004 в консоли браузера.


Затем я выполнил сравнение 0.1+0.2===0.3 и получил результат false.


Сначала я считал, что это ошибка в JavaScript, поэтому я попытался проделать то же самое на Java и Python и получил тот же результат в обоих случаях.

Проведя много исследований, я пришел к выводу, что это не ошибка.
Я выяснил, что это математика: арифметика с плавающей точкой.
Давайте немного углубимся, чтобы понять, что происходит за кулисами.

У компьютеров ограниченный объем памяти, поэтому им приходится выбирать между диапазоном и точностью.

Числа в JavaScript должны храниться в пределах 64 бит, что означает, что мы можем иметь целые числа с точностью до 15 цифр и максимум 17 цифр после десятичной точки. Это называется плавающей точкой, потому что нет фиксированного количества цифр до или после десятичной точки, что позволяет представлять широкий диапазон чисел, как больших, так и маленьких.

Проблема заключается в том, что компьютер использует систему Base-2, т.е. двоичную систему, в то время как люди используют систему Base-10, что приводит к ошибкам округления, когда вся память уже израсходована.

Это причина получения 0.1 + 0.2 = 0.30000000000000004.

Спасибо, что прочитали эту статью; я не стал подробно описывать всю математику, но достаточно, чтобы вы поняли, что происходит.

Оцените статью
devanswers.ru
Добавить комментарий