我想计算这个表达式:
(1 + 1 / math.inf) ** math.inf,
应该评估为e。然而,Python返回1.为什么会这样?
===== UPDATE ======
我想在这里做的是从用户的输入中获得有效的年度费率,APR(年度百分比率)。
def get_EAR(APR, conversion_times_per_year = 1):
return (1 + APR / conversion_times) ** conversion_times - 1
我希望这个表达式也适用于连续复合。是的我理解我可以编写if语句来区分连续复合与正常情况(然后我可以直接使用常量e
),但我更倾向于采用集成方式。
答案 0 :(得分:5)
默认情况下,python中没有实现限制的计算,为此您可以使用sympy
from sympy import *
x= symbols('x')
r = limit((1+1/x)**x, x, oo)
print(r)
输出:
E
答案 1 :(得分:3)
因为您正在执行两个单独的限制:
lim x->infty ((lim y->infty (1 + 1/y))^x)
哪个Python正确评估为1。
这是一个穷人的适当限制的实现:
def euler(x):
return (1+1/x)**x
for i in range(10):
print(euler(10**i))
2.0
2.5937424601000023
2.7048138294215285
2.7169239322355936
2.7181459268249255
2.7182682371922975
2.7182804690957534
2.7182816941320818
2.7182817983473577
2.7182820520115603
答案 2 :(得分:1)
您可以在这里使用mpmath(http://mpmath.org/)包:
>>> import mpmath as mp
>>> f = lambda x: (1.0 + 1.0/x)**x
>>> mp.limit(f, mp.inf)
mpf('2.7182818284590451')
答案 3 :(得分:0)
我认为这里没有限制计算,因为这里没有变量可以在变量的不同值处计算整个语句。
Python只是以最简单的方式进行计算。 Pythons编译器只需将1/math.inf
变为0,然后将math.inf
的幂1
计算为jq '.[]'
。
答案 4 :(得分:0)
在Win32上使用Python 3.8.2(tags / v3.8.2:7b3ab59,2020年2月25日,23:03:10)[MSC v.1916 64位(AMD64)]
<select id="territory" name="territory">
<option value="EU">A</option>
<option value="GB">B</option>
<option value="ALL">C</option>
</select>
<select id="territory2" name="territory2">
<option value="1" class="EU">A</option>
<option value="2" class="GB">B</option>
<option value="3" class="ALL">C</option>
<option value="4" class="ALL">D</option>
</select>
import sys
import math
E = sys.float_info.epsilon
e = (1 + E) ** (1 / E)
print(e, math.e, e == math.e)