使用python计算特殊限制

时间:2017-03-26 04:42:38

标签: python python-3.x math calculus

我想计算这个表达式:

(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),但我更倾向于采用集成方式。

5 个答案:

答案 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)