我想通过运行下面的代码来估算Pi,该代码适合具有单位直径的圆的n边正多边形,并使用代码中的函数计算其周长。但是,当使用长双变量类型时,第34项后的输出为0,或者当使用双变量类型时,其增加无界限。我该如何纠正这种情况?任何建议或帮助表示赞赏和欢迎。Pi的数值评估
由于
PS:操作系统:Ubuntu的12.04 LTS 32位,编译器:GCC 4.6.3
#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <stdlib.h>
#define increment 0.25
int main()
{
int i = 0, k = 0, n[6] = {3, 6, 12, 24, 48, 96};
double per[61] = {0}, per2[6] = {0};
// Since the above algorithm is recursive we need to specify the perimeter for n = 3;
per[3] = 0.5 * 3 * sqrtl(3);
for(i = 3; i <= 60; i++)
{
per[i + 1] = powl(2, i) * sqrtl(2 * (1.0 - sqrtl(1.0 - (per[i]/powl(2, i)) * (per[i]/powl(2, i)))));
printf("%d %f \n", i, per[i]);
}
return 0;
for(k = 0; k < 6; k++)
{
//p[k] = k
}
}
好感谢您的回答了类似的方法。我认为教练让我们有目的地这样做,那就是他希望我们知道这些事实。就我而言,你提出的准确度不能提高,其他条款不能计算,尽管机器epsilon的长双倍较低。 – Vesnog
Long double向您购买了更多的迭代,重新排列您的条款也可以提供帮助(有时它可以帮助LOT),但这种逼近方法存在太多问题,并且您快速地耗尽了一些位。恕我直言,任何迭代近似都是“有罪直到被证明是无辜的” - 编写像这样非常健壮和精确的FP算法是一个难题,而错误控制需要从第一步开始处理。 – Sneftel