![](/img/trans.png)
[英]Difference between approxCountDsitinct and approx_count_distinct in spark functions
[英]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):
有谁知道为什么?
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.