#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
.
, чтобы сделать второе выражение плавающим. Это имеет смысл, спасибо!