Python 中的计算分歧
Calculation divergence in Python
我在 Python 中做了这个计算:
((1.00044*(1.00175/1.00044)**(252/(4-1))**((1-1)/252))**(252/1)-1)*100
55.36617662154271
Excel 中的相同计算结果为:11,7234。
造成这种分歧的原因是什么?
在Excel和Python中,你的表达可以简化为:
((1.00044*(1.00175/1.00044)**84**0)**252-1)*100
区别在于它们计算幂表达式的方式(求幂)。 Python 跟随 应用 right-associative 求幂。 2 ** 3 ** 4 == 2 ** (3 ** 4) == 2417851639229258349412352
。在 Excel 中,求幂是 left-to-right 所以 2 ^ 3 ^ 4
被计算为 (2 ^ 3) ^ 4 = 4096
.
如果您添加方括号使 Python 在 **0
之前计算 **84
,那么您会得到与 Excel:
相同的结果
((1.00044*((1.00175/1.00044)**84)**0)**252-1)*100 # 11.7234
或者如果您在不同的地方添加括号,您可以在 Excel 中得到 Python 结果:
=((1.00044*(1.00175/1.00044)^(84^0))^252-1)*100 # 55.366
我在 Python 中做了这个计算:
((1.00044*(1.00175/1.00044)**(252/(4-1))**((1-1)/252))**(252/1)-1)*100
55.36617662154271
Excel 中的相同计算结果为:11,7234。
造成这种分歧的原因是什么?
在Excel和Python中,你的表达可以简化为:
((1.00044*(1.00175/1.00044)**84**0)**252-1)*100
区别在于它们计算幂表达式的方式(求幂)。 Python 跟随 2 ** 3 ** 4 == 2 ** (3 ** 4) == 2417851639229258349412352
。在 Excel 中,求幂是 left-to-right 所以 2 ^ 3 ^ 4
被计算为 (2 ^ 3) ^ 4 = 4096
.
如果您添加方括号使 Python 在 **0
之前计算 **84
,那么您会得到与 Excel:
((1.00044*((1.00175/1.00044)**84)**0)**252-1)*100 # 11.7234
或者如果您在不同的地方添加括号,您可以在 Excel 中得到 Python 结果:
=((1.00044*(1.00175/1.00044)^(84^0))^252-1)*100 # 55.366