Есть ли причина вычитать ноль из числа в Python?

#python #math

#python #математика

Вопрос:

Недавно я наткнулся на этот код на Python, вот фрагмент кода:

 if abs(i - 0) < SMALL_NUMBER:
    # For non-inclined orbits, raan is undefined;
    # set to zero by convention
  

Что меня действительно смущает, так это эта часть:

 abs(i - 0)
  

Есть ли какая-либо законная причина вычитать ноль из числа перед передачей его в abs() ? Кажется, нет никакой математической причины, но, возможно, в языке есть какая-то причуда?

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

1. Я бы понял i - 0.0 , но здесь…

2. Честно говоря, я не думаю, что есть какая-либо причина для этого, кроме попытки проверки типа.

3. Добавлен фрагмент кода. Код взят из библиотеки orbital math, но вопрос на самом деле не связан с orbital math, кроме этого и ссылки, которую я не могу предоставить больше контекста.

4. Что такое i ? Возможно, это также даст вам подсказку, чем i - 0 отличается от i .

5. Может быть, попробуйте связаться с автором по этому поводу. Я тоже не могу придумать законной причины для этого.

Ответ №1:

Мы можем только догадываться, но этот код

 abs(i - 0)
  

пытается ли материализовать расстояние между i и 0 , как мы бы сделали

 abs(x - y)
  

Кроме того, вычитание / добавление 0 не изменяет значение числа с плавающей точкой (иначе это означало бы, что непрерывное добавление 0 приведет к смещению числа …)

Обратите внимание, что это связано с затратами на процессор:

 >>> 
  6           0 LOAD_GLOBAL              0 (abs)
              3 LOAD_GLOBAL              1 (i)
              6 LOAD_CONST               1 (0)  <=== not optimized out
              9 BINARY_SUBTRACT                 <=== not optimized out
             10 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             13 RETURN_VALUE
  

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

1. согласен с вами, может 0 быть, это просто математическое значение.

2. Я думаю, что автор пытается сформулировать концепцию «сколь угодно близко к 0».

3. да, вероятно. Но это не бесплатно, как показывает разборка

4. Тогда я предполагаю, что было бы неплохо удалить их с точки зрения производительности в дополнение к «это сбивает с толку»?

5. влияние tbh на производительность, вероятно, очень незначительно. Но я бы не стал писать это так 🙂