利用以下关系求pai
输入5时结果正确,输入100时结果就变成0.000000,求大佬帮帮忙看看哪里有问题π/2=(2×2)(4×4)(6×6)…[(2n)×(2n))]/(1×3)(3×5)(5×7)…[(2n−1)×(2n+1)]
注意:
(1)n均为int型,求π时相关变量用double型。程序要避免计算结果溢出。
(2)用printf函数输出时,使用“%7.5f”格式符输出。
____________________________________________________________
#include<stdio.h>
long long intupre(int n)
{
longlong int sum=((2*n)*(2*n));
if(n>1)
{
sum*=upre(n-1);
}
return sum;
}
long long int dnre(int n)
{
long long int sum=((2*n-1)*(2*n+1));
if(n>1)
{
sum*=dnre(n-1);
}
return sum;
}
int main(void)
{
int n;
double pai;
printf("please input...\n");
scanf("%d",&n);
pai=2.0*((double)upre(n))/((double)dnre(n));
printf("%7.5f\n",pai);
return 0;
}
________________________________________________________________
开始的关系最后应该是(2*n-1)*(2*n+1),打错了不好意思
注意你的公式分子,(2×2)(4×4)(6×6)…[(2n)×(2n))]
= 4*16*36......4*n*n
不清楚你的公式是否正确,但问题在于 n = 100 时,早就溢出 long long 了。数值太大了 注:数学知识
(a * b) / (c * d) = (a / c) * (b / d)
#include <stdio.h>
double pi(int n){
if(n == 1) return ((4.*n*n) / ((2.*n-1) * (2.*n+1)));
return ((4.*n*n) / ((2.*n-1) * (2.*n+1))) * pi(n - 1);
}
int main(void){
printf("%lf", pi(100)*2);
return 0;
} 傻眼貓咪 发表于 2022-3-24 13:10
注意你的公式分子,(2×2)(4×4)(6×6)…[(2n)×(2n))]
= 4*16*36......4*n*n
不清楚你的公式是否正确, ...
谢谢啊,公式没问题,但你说的很有道理
顺便问一下,怎么发图片啊,一直让我在相册选图,但什么也没有,可能看图更清晰一些 先上传图想发的图,然后点取图片便可 傻眼貓咪 发表于 2022-3-24 14:28
先上传图想发的图,然后点取图片便可
谢谢啊 傻眼貓咪 发表于 2022-3-24 13:46
注:数学知识
(a * b) / (c * d) = (a / c) * (b / d)
我懂你的意思了,非常感谢啊{:9_232:} 天天下雨! 发表于 2022-3-24 14:42
我懂你的意思了,非常感谢啊
{:10_254:}
页:
[1]