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
總結
以上是生活随笔為你收集整理的c语言pi的乘法,c语言 根据公式求出π的近似值。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言比较当前日期大小,C语言判断两个日
- 下一篇: ymodem协议c语言,STC单片机IS