python - 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
解决方案
看来您想要eApprox
返回一个取决于k
; 就目前而言,您的函数始终将 k 设置为 1,因此它只计算(1+(1/1))**1
.
推荐阅读
- java - List 项的垃圾收集
- arduino - 用于餐厅停车的 Arduino 红外传感器
- sql - 如何检查 UNIQUEIDENTIFIER 值并用选择字符串值替换(如果存在)
- excel - 将日期选择器添加到 Excel 2013 的 VBA 用户窗体
- angular - Angular 指令初始化良好实践
- android-studio - 卸载 Android SDK 工具卡住了
- javascript - 为什么我可以用 Date 对象做数学运算?
- java - thread print name with runnable parameter
- docker - 使用自动端口映射时,Docker 应用程序不适用于主机 IP
- atom-editor - 来自 linting 的两个建议弹出窗口