【发布时间】:2013-05-11 04:20:46
【问题描述】:
我正在尝试使用Ramanujan algorithm 近似 pi:
它应该计算总和,直到最后一个总和小于1e-15。
这只是为了好玩,最多占用我半个小时的时间......但我的代码没有产生任何接近 pi 的东西,我不知道为什么。很可能我忽略了一些愚蠢的事情,但不确定!
请注意:我从 1 开始 $k,因为 0 打破了我的 factorialsub 并且根据我的计算,k=0 无论如何都会返回 0。
我意识到可以更有效地编写代码;我尽可能简单地写出来,看看我是否能理解我哪里出错了。任何帮助表示赞赏!
#!/usr/bin/perl
use warnings;
use strict;
sub approx_pi {
my $const = (2 * sqrt(2)) / 9801;
my $k = 1;
my $sum = 0;
while ($sum < 1e-15) {
my $p1 = factorial((4 * $k), 1);
my $p2 = 1103 + (26390 * $k);
my $p3 = (factorial($k, 1))**4;
my $p4 = 396**(4 * $k);
$sum = $sum + ( ($p1 * $p2) / ($p3 * $p4) );
$k++;
}
#print "Const: $const\nSum: $sum\n";
return (1 / ($const * $sum));
}
sub factorial {
my ($i, $total) = @_;
return $total if $i == 1;
$total = $total * $i;
#print "i: $i total: $total\n";
factorial($i-1, $total);
}
my $pi = approx_pi();
print "my pi is: $pi\n";
【问题讨论】:
-
“根据我的计算,k=0 无论如何都会返回 0。” - 跟我们讨论一下?
-
将 k = 0 放入等式中,您至少会得到一个分子零。我不确定k!,我读到如果k = 0,那么k!= 1(不知何故)但如果分子为0,则结果为零。除非我的基础数学不正确......
-
哎呀,什么是k!如果 k = 0 ??
-
....报废那个,这就是问题....谢谢@AakashM。一个糟糕的假设
-
没问题。请记住,数学家非常简洁,如果不需要
k = 0术语,那么公式肯定是“从k = 1到infinity的总和”