当我计算多个功效时
123 ** 123 ** 123
计算需要不确定的时间来执行,但是当我运行时
In [5]: 0.123 ** 123 ** 123
Out[5]: 0.0
它立即返回。
浮点版本如何运行得如此快?
答案 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。平台数学函数倾向于优化到极致,并采取一切可能的捷径,在数代数字数学中都需要技巧和欺骗。