c语言pi的乘法,c语言 根据公式求出π的近似值。

共回答了10个问题采纳率:80%

#includedouble powi(double num, int multi) {

double r = 1.0;

int i;

for (i = 0; i < multi; i++) {

r *= num;

}

return r;

}

double item(int n) {

double r = 1.0;

int i;

/*1.0 * 1 / 2 * 3 / 4 * 5 / 6 .....*/

for (i = 1; i < n; i++) {

if (i % 2) {

r *= i;

/*printf("*%d", i); */

} else {

r /= i;

/*printf("/%d", i); */

}

}

r *= 1;

/*printf("*%d", 1); */

r /= n;

/*printf("/%d", n); */

r *= powi(0.5, n);

/*printf("*%lf", powi(0.5, n)); */

/*printf(" -- item %d: %lf n", n, r); */

return r;

}

int main() {

double pd6 = 0.0, ci = 0.0;

int i = 1;

do {

ci = item(i);

pd6 += ci;

i += 2;

} while (ci >= 1e-6);

printf("PI=%.6lfn", pd6 * 6);

return 0;

}完全按你的公式做的,结果真的对了,3.141592(这里对6位有效数字有个存疑,就是应该输出6位还是7位数字,理论上有效数字后面应该带上一个估值,用来修正有效数字的,如果要求真的那么严格,我可以给你写个函数用来输出6位有效数字)。

一般级数很少有用这个复杂的式子的吧,一般都是 1-1/3+1/5-1/7+1/9-1/11 这个式子,你的公式竟然也是对的。楼上的完全没看懂级数的项的规律。-------------------------------------------------以上是20:29分发的回答,既然你没有追问,我只能通过修改这个回答,慢慢解释一下:powi函数 是为了不引用庞大的math库,而自己写的一个简单的正整数幂的函数(math库里有double pow(double, double),这个运算过程中不需要小数的幂值,就用循环乘法来实现了。item函数 是每个项的计算过程,仔细看的话可能会发现,这些项并不是 i=1,2,3,4... 而是 i=1,3,5,7... 这个是为了符合级数的项中的值,都是奇数在做运算。item里面的那些注释掉的 printf 是故意留下用来观察级数表达式的。由于每一项都是多个数值相乘或除,如1/2x3/4x5/6 其实就是1 * 2 / 3 * 4 ,这些printf可以在计算每一项的时候把整个过程打印出来。级数的难点其实就是找到项的通用表达式,你的公式已经把表达式写的很清楚了,就看你把它提取成算法了

1年前

5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值