我正在尝试通过公式pi的近似值
pi= 3 + (4/(2*3*4)) - (4/(4*5*6)) + (4/(6*7*8)) - …
(依此类推)。但是,在以下情况下,我的代码(如下所示)有2个单独的答案(3.1415926535900383和3.141592653590042):
有人知道为什么吗?
def approximate_pi(n):
approx=0
deno=2
if n == 1:
return 3
for x in range(n-1):
if x%2:
approx -= 4/((deno)*(deno+1)*(deno+2))
else:
approx += 4/((deno)*(deno+1)*(deno+2))
deno+=2
return approx+3
和
def approximate_pi(n):
approx=3
deno=2
if n == 1:
return 3
for x in range(n-1):
if x%2:
approx -= 4/((deno)*(deno+1)*(deno+2))
else:
approx += 4/((deno)*(deno+1)*(deno+2))
deno+=2
return approx
答案 0 :(得分:0)
我认为是因为您在pc中不能有确切的浮点数。您可以在此处获取更多信息:Why can't decimal numbers be represented exactly in binary?
答案 1 :(得分:0)
这是因为float在python中的方式。如果您没有小数点前的数字,它会提供3个额外的精度数字(来自我的试用)。这会改变答案,因为当您从0开始时,您将获得完全不同的计算。
答案 2 :(得分:0)
一个近似算法近似。两个数字都不是π的真实值。您的两个版本的起点不同,所以为什么对它们给出的近似值略有不同感到惊讶?重要的是,它们运行的时间越长,它们都将收敛到真实价值的距离就越大。
请注意,这不是浮点数的有限精度表示的伪像。虽然浮点舍入会影响结果,但即使精度无限,也会发现差异算术。