为什么以“ 0”和“ 3”开头大约有区别

时间:2018-11-12 04:48:36

标签: python python-3.x

我正在尝试通过公式pi的近似值 pi= 3 + (4/(2*3*4)) - (4/(4*5*6)) + (4/(6*7*8)) - …(依此类推)。但是,在以下情况下,我的代码(如下所示)有2个单独的答案(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

3 个答案:

答案 0 :(得分:0)

我认为是因为您在pc中不能有确切的浮点数。您可以在此处获取更多信息:Why can't decimal numbers be represented exactly in binary?

答案 1 :(得分:0)

这是因为float在python中的方式。如果您没有小数点前的数字,它会提供3个额外的精度数字(来自我的试用)。这会改变答案,因为当您从0开始时,您将获得完全不同的计算。

答案 2 :(得分:0)

一个近似算法近似。两个数字都不是π的真实值。您的两个版本的起点不同,所以为什么对它们给出的近似值略有不同感到惊讶?重要的是,它们运行的​​时间越长,它们都将收敛到真实价值的距离就越大。

请注意,这不是浮点数的有限精度表示的伪像。虽然浮点舍入会影响结果,但即使精度无限,也会发现差异算术。