为什么用“0”和“3”开始的时间有区别

2024-06-16 11:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过公式计算出π的近似值 pi= 3 + (4/(2*3*4)) - (4/(4*5*6)) + (4/(6*7*8)) - …(依此类推)。但是,我的代码(如下所示)有两个单独的答案(3.1415926535900383和3.141592653590042):

  1. 近似变量分别以“0”和“3”开头
  2. n=10000个

有人知道为什么吗?你知道吗

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

Tags: 答案代码inforreturnifdefpi
3条回答

我想是因为你不能在pc机上有精确的浮点数。你可以在这里获得更多信息:Why can't decimal numbers be represented exactly in binary?

近似算法近似。两个数字都不是π的真值。你的两个版本从不同的起点开始,那么为什么你会惊讶于它们给出的近似值略有不同呢?重要的是,运行它们的时间越长,它们就越接近真实值。你知道吗

请注意,这是而不是浮点有限精度表示的伪影。虽然浮点舍入会影响结果,但即使使用无限制精度的算术,也会看到差异。你知道吗

这是因为python中float的方式。如果你没有小数点前的数字,它会给出3个额外的精确数字(我的试验)。这改变了答案,因为当你从0开始时,你会得到一个完全不同的计算。你知道吗

相关问题 更多 >