为什么“ 0.123 ** 123 ** 123”立即返回,而“ 123 ** 123 123 123”需要不确定的执行时间?

时间:2018-11-03 23:00:57

标签: python

当我计算多个功效时

 123 ** 123 ** 123 

计算需要不确定的时间来执行,但是当我运行时

In [5]: 0.123 ** 123 ** 123                                                                                       
Out[5]: 0.0

它立即返回。

浮点版本如何运行得如此快?

1 个答案:

答案 0 :(得分:2)

如评论中的Charles Duffy所述,浮点数学没有无限的精度(另请参见问题Is floating point math broken?)。

0.123 ** 123 ** 123中,仅需几个步骤,中间结果就等于零,并且不需要执行后续的乘法。

一个临时值等于零的天真演示:

>>> v = 0.123
>>> i = 0
>>> while True:
...:    v = v*v
...:    i += 1
...:    if v == 0:
...:        break
...:    
>>> i
>>> 9

在现实世界中,没有什么比这更好的了。 CPython在912行中调用patform pow here。平台数学函数倾向于优化到极致,并采取一切可能的捷径,在数代数字数学中都需要技巧和欺骗。