Ответ 1
==
является рефлексивным для всех чисел, ноль, -zero, ininity и -infinity, но не для nan.
Вы можете получить inf
, -inf
и nan
в родном Python только арифметическими операциями над литералами, как показано ниже.
Они ведут себя правильно, как в IEEE 754, и без исключения в области математики:
>>> 1e1000 == 1e1000
True
>>> 1e1000/1e1000 == 1e1000/1e1000
False
1e1000
- очень большое число, поэтому float и double представляют его как бесконечность.
- бесконечность равна бесконечности
- бесконечность, деленная на бесконечность, не является числом
- не число!= не число
Арифметика с плавающей точкой в Python также работает нормально для бесконечности минус бесконечность и т.д.:
>>> x = 1e1000
>>> x
inf
>>> x+x
inf
>>> x-x
nan
>>> x*2
inf
>>> x == x
True
>>> x-x == x-x
False
>>>
И для нулевого и минус-нулевого случая:
>>> inf = float("inf")
>>> 1/inf
0.0
>>> -1/inf
-0.0
>>> -1/inf == 1/inf
True
>>>