gpt4 book ai didi

python - C、Perl 和 Python 相似的循环不同的结果

转载 作者:行者123 更新时间:2023-11-30 20:04:00 25 4
gpt4 key购买 nike

我用 python、perl 和 c 编写了计算 pi 的脚本。它们都使用相同的算法(具有 n 个子区间的圆的梯形雷曼和),并且当 n 相同时,python 和 perl 程序总是得到相同的结果。然而,c 程序没有得到应有的相同答案,它实际上高估了 pi,这是不可能的。 c 程序出了什么问题?

Python:

#!/usr/bin/python
n = 1000000
def f(x):
return (1-(float(x)**2))**float(0.5)
val = 0
for i in range(n):
i = i+1
val = val+f(float(i)/float(n))
val = val*2
pi = (float(2)/n)*(float(1)+val)
print pi

Perl:

#!/usr/bin/perl
$n = 1000000;
$h = 0;
for($a = 1; $a < $n; ++$a){
$t = $a/$n;
$val = (1-(($t)**2))**0.5;
$h+=$val;
}
$h = $h*2;
$pi = (2/$n)*(1+$h);
printf "%.11f", $pi;

C:

#include <stdio.h>
#include <math.h>
int main()
{
int count, n = 1000000;
double pi;
double val = 0.0, p = 0.50, x = 1.0, four = 4.0;
for(count = 1; count < n; ++count)
{
val += (pow(x-(((double)count/(long double)n)*((double)count/(long
double)n)), p));
}
pi = (val + x) * (four/(long double)n);
printf("%.11f", pi);
}

结果:C = 3.14159465241Perl 和 Python = 3.14159265241

最佳答案

好吧,比较您的方法,很明显您计算 pi 的最终操作是不正确的。

pi = (val + x) * (four/(long double)n); 替换为以下两行:

val = val * (long double)2.0;
pi = (val + x) * ((long double)2.0/(long double)n);

编译并运行给出:

3.14159265241

我相信这就是您正在寻找的输出。

关于python - C、Perl 和 Python 相似的循环不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com