Найти тему
Секреты python

Секреты сравнения 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.1).as_integer_ratio()
num = format(x / y, ".22f")
print(num)

Результат:

0,1000000000000000055511

Как правильно сравнить?

Для этого можно использовать пакеты math или numpy и функцию isclose():

import math
x = math.isclose(0.1+0.1+0.1, 0.3)
print(x)

Результат: True

Аналогично с NumPy.

import numpy as np
x = np.isclose(0.1+0.1+0.1, 0.3)
print(x)

Результат: True

#питон #python #pythonснуля #python3 #float #секреты #технологии

Наука
7 млн интересуются