繁体   English   中英

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

[英]Why is there a difference between starting with a "0" and "3" for approx

我试图通过pi= 3 + (4/(2*3*4)) - (4/(4*5*6)) + (4/(6*7*8)) - … (等等)。 但是,我的代码(如下所示)在以下情况下有 2 个单独的答案(3.1415926535900383 和 3.141592653590042):

  1. approx 变量分别以“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

我认为是因为在 pc 中你不能有精确的浮点数。 您可以在此处获得更多信息: 为什么十进制数不能用二进制精确表示?

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

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

请注意,不是浮点数的有限精度表示的人工制品。 虽然浮点舍入会影响您的结果,但即使使用无限精度算术,您也会看到差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM