Проверить: −0 (число) в Википедии
По сути, IEEE фактически определяет отрицательный ноль
И по этому определению для всех целей:
-0.0 == +0.0 == 0
Я согласен с aaronasterling, что -0.0 и +0.0 - это разные объекты.Делая их равными (оператор равенства), вы гарантируете, что в коде не появятся тонкие ошибки.Подумайте о a * b == c * d
>>> a = 3.4
>>> b =4.4
>>> c = -0.0
>>> d = +0.0
>>> a*c
-0.0
>>> b*d
0.0
>>> a*c == b*d
True
>>>
[Редактировать: Больше информации, основанной на комментариях]
Когда я сказал для всех практических целей, я выбрал слово довольно поспешно.Я имел в виду стандартное сравнение на равенство.
Я бы добавил больше информации и ссылок в этом отношении:
(1) Как говорится в ссылке, стандарт IEEE определяет сравнение так, что +0 = -0,а не -0 <+0.Хотя всегда можно было бы игнорировать знак нуля, стандарт IEEE этого не делает.Когда умножение или деление включает в себя ноль со знаком, при вычислении знака ответа применяются обычные правила знака. </p>
Такие операции, как divmod, atan2, демонстрируют такое поведение.Фактически, atan2 соответствует определению IEEE, как и базовая библиотека «C».См. Ссылку № 2 для определения.
>>> divmod(-0.0,100)
(-0.0, 0.0)
>>> divmod(+0.0,100)
(0.0, 0.0)
>>> math.atan2(0.0, 0.0) == math.atan2(-0.0, 0.0)
True
>>> math.atan2(0.0, -0.0) == math.atan2(-0.0, -0.0)
False
Один из способов - выяснить в документации, соответствует ли реализация поведению IEEE.Из обсуждения также видно, что существуют и тонкие вариации платформы.
Как бы то ни было, этот аспект (соответствие определению IEEE) не везде соблюдался.Смотрите отказ от PEP 754 (# 3) из-за незаинтересованности!Я не уверен, что это было подобрано позже.
ссылки:
- http://docs.sun.com/source/806-3568/ncg_goldberg.html#924
- FPTAN в http://en.wikipedia.org/wiki/Atan2
- http://www.python.org/dev/peps/pep-0754/