953 читали · 3 года назад
Секреты сравнения float - чисел в python
В python при сравнении вещественных чисел (с плавающей точкой) могут возникнуть такие казусы. >>>0.1+0.1+0.1==0.3 >>>False Сумма 0,1+0,1+0,1 не равна 0,3! Причина в том, что 0,1 имеет основание 10, которое хранится в памяти в двоичном формате, а значит, преобразуется в 2 [в двоичном представлении - 0.0(0011)] 😊. Если отобразить, как хранится в памяти число 0.1 с точностью до 22 знаков получим: Поэтому при сложении получаем число больше 0,3. Как это проверить? x, y = (0...
117 читали · 4 года назад
Числа с плавающей точкой
Многих новичков (и не очень новичков) может фрустрировать тот факт, что: >>> 0.1 + 0.1 + 0.1 - 0.3 5.551115123125783e-17 😱 Нет, ваш Python не сломан, так и должно быть. Много слов уже сказано про представление чисел с точкой в компьютерах. Большинство наших вычислений производится согласно стандарту IEEE754 (👉читайте подбронее https://habr.com/post/112953/). Если коротко, то числа в компьютере квантированы, то есть если упрощенно, они не непрерывны. Факт: числа 0.3 для компьютера не существует, зато есть самое ближайшее к нему число (3 - 5...