В научной нотации два разных числа с плавающей запятой оцениваются как равные

#python

#python

Вопрос:

Почему следующее выражение принимает значение true?

 In [0]: 1e18 == (1e18   50)
Out[0]: True
 

При замене научной нотации возведением в степень, это, как и следовало ожидать, оценивает False :

 In [1]: 10**18 == (10**18   50)
Out[1]: False
 

Комментарии:

1. Это разница между целочисленной арифметикой (с множественной точностью) и компьютерной арифметикой с плавающей запятой. обозначение ‘e’ дает вам плавающую точку.

Ответ №1:

У вас нет двух пар чисел с плавающей запятой. Верхний пример, являющийся научной нотацией, представляет собой пару чисел с плавающей запятой. Поскольку добавленная разница меньше точности с плавающей запятой, они сравниваются как равные.

Нижний пример представляет собой пару целых чисел. Вы можете легко проверить это с type помощью функции. У длинных целых чисел Python нет проблем с сохранением необходимых 18 цифр точности.

 >>> type(1e18)
<class 'float'>
>>> type(10**18)
<class 'int'>
 

Комментарии:

1. Глупый я, я забыл добавить a . , чтобы сделать второе выражение плавающим. Это имеет смысл, спасибо!