在Python中,有没有理由从数字中减去零?
我最近遇到了一个代码片段:在Python中,有没有理由从数字中减去零?,python,math,Python,Math,我最近遇到了一个代码片段: if abs(i - 0) < SMALL_NUMBER: # For non-inclined orbits, raan is undefined; # set to zero by convention 在将一个数字传递到abs()之前,是否有合法的理由将其减去零?似乎没有任何数学上的原因,但也许语言中有一些怪癖?我们只能猜测,但这段代码 abs(i - 0) 正试图实现i和0之间的距离,就像我们所做的那样 abs(x - y) 除此之
if abs(i - 0) < SMALL_NUMBER:
# For non-inclined orbits, raan is undefined;
# set to zero by convention
在将一个数字传递到
abs()
之前,是否有合法的理由将其减去零?似乎没有任何数学上的原因,但也许语言中有一些怪癖?我们只能猜测,但这段代码
abs(i - 0)
正试图实现i
和0
之间的距离,就像我们所做的那样
abs(x - y)
除此之外,减/加0不会改变浮点值(否则意味着连续加0会使数字漂移…)
请注意,它在CPU方面具有成本优势:
>>>
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
>
6 0负载_全局0(abs)
3负载_全局1(i)
6 LOAD_CONST 1(0)我会理解I-0.0
,但在这里……老实说,除了尝试进行类型检查之外,我认为没有任何理由这样做。添加了代码段。代码来自轨道数学库,但问题与轨道数学无关,除此之外,链接我无法提供更多上下文。什么是I
?也许这也会给你一个提示,i-0
与i
有何不同。也许可以试着就此联系作者。我也想不出一个合法的理由。与你辩论,也许0
只是站在数学意义上。我认为作者试图阐明“任意接近0”的概念。是的,可能。但是它并不是免费的,正如分解所显示的那样,我认为除了“它让人困惑”之外,从性能的角度删除它们也是一个好主意?tbh对性能的影响可能非常小。但我不会这样写:)
>>>
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