首页 > 解决方案 > eApprox 与 while 循环

问题描述

给定一个正数 (n),我尝试使用等式 e=(1+1/k)^k 随着 k 的增加来确定两个连续答案何时与 n 个有效数字一致。给我的例子 n=1

if k=1:
e=(1+1/1)^1
e=2

and if k=2
e=(1+1/2)^2
e=2.25

这两个会同意 1 个有效数字,因为对于一个数字,它们都等于 2。这是我到目前为止工作的代码,但不明白为什么无论输入什么 n 值它都会一直返回 2.0

import decimal
def significant (d, n):
    """Given a desired precision, express a float to this level of 
precision.
    >>> significant (12.345678, 4)
    12.35
    Params: 
        d (float): # of interest
        n (int):   precision (# significant digits)
    Returns: (float) d rounded to this precision
    """

    decimal.getcontext().prec = n
    return float(decimal.Decimal(d) / decimal.Decimal (1))

def eApprox (n):
    prev=0
    k=1
    e=(1+(1/k))**k
    prob=significant(e,n)
    while str(prob)!=prev:
        prev=str(prob)[:]
        k+=1
    return e

标签: pythonwhile-loop

解决方案


看来您想要eApprox返回一个取决于k; 就目前而言,您的函数始终将 k 设置为 1,因此它只计算(1+(1/1))**1.


推荐阅读