10e26
соответствует десятикратному десятичному числу 26, что составляет 10 27 .
10**26
представляет собой десять в степени 26, 10 26 .
Очевидно, что они разные, поэтому 10e26 == 10**26
неверно.
Однако, если мы исправим ошибку и сравним 1e26
и 10**26
, оценив 1e26 == 10**26
, мы получим false по другой причине:
1e26
вычисляется в формате с плавающей запятой ограниченной точности, в большинстве случаев получая 100000000000000004764729344. (Python не является строгим в отношении формата с плавающей запятой.) 100000000000000004764729344 - самое близкое, которое можно получить до 10 26 , используя 53 значащих бита.
10**26
вычисляется с помощью целочисленной арифметики, получая 100000000000000000000000000.
- Сравнивая их отчеты, они отличаются.
(Я не уверен в семантике Python, но я предполагаю, что она преобразует значение с плавающей запятой в целое число с расширенной точностью для сравнения. Если вместо этого мы преобразуем целое число в число с плавающей запятой, с float(10**26) == 1e26
, преобразование От 100000000000000000000000000 до float
дает то же значение, 100000000000000004764729344, и сравнение возвращает значение true.)