c语言pi的乘法,c语言 根据公式求出π的近似值。
共回答了10個(gè)問題采納率: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;
}完全按你的公式做的,結(jié)果真的對(duì)了,3.141592(這里對(duì)6位有效數(shù)字有個(gè)存疑,就是應(yīng)該輸出6位還是7位數(shù)字,理論上有效數(shù)字后面應(yīng)該帶上一個(gè)估值,用來修正有效數(shù)字的,如果要求真的那么嚴(yán)格,我可以給你寫個(gè)函數(shù)用來輸出6位有效數(shù)字)。
一般級(jí)數(shù)很少有用這個(gè)復(fù)雜的式子的吧,一般都是 1-1/3+1/5-1/7+1/9-1/11 這個(gè)式子,你的公式竟然也是對(duì)的。樓上的完全沒看懂級(jí)數(shù)的項(xiàng)的規(guī)律。-------------------------------------------------以上是20:29分發(fā)的回答,既然你沒有追問,我只能通過修改這個(gè)回答,慢慢解釋一下:powi函數(shù) 是為了不引用龐大的math庫(kù),而自己寫的一個(gè)簡(jiǎn)單的正整數(shù)冪的函數(shù)(math庫(kù)里有double pow(double, double),這個(gè)運(yùn)算過程中不需要小數(shù)的冪值,就用循環(huán)乘法來實(shí)現(xiàn)了。item函數(shù) 是每個(gè)項(xiàng)的計(jì)算過程,仔細(xì)看的話可能會(huì)發(fā)現(xiàn),這些項(xiàng)并不是 i=1,2,3,4... 而是 i=1,3,5,7... 這個(gè)是為了符合級(jí)數(shù)的項(xiàng)中的值,都是奇數(shù)在做運(yùn)算。item里面的那些注釋掉的 printf 是故意留下用來觀察級(jí)數(shù)表達(dá)式的。由于每一項(xiàng)都是多個(gè)數(shù)值相乘或除,如1/2x3/4x5/6 其實(shí)就是1 * 2 / 3 * 4 ,這些printf可以在計(jì)算每一項(xiàng)的時(shí)候把整個(gè)過程打印出來。級(jí)數(shù)的難點(diǎn)其實(shí)就是找到項(xiàng)的通用表達(dá)式,你的公式已經(jīng)把表達(dá)式寫的很清楚了,就看你把它提取成算法了
1年前
5
總結(jié)
以上是生活随笔為你收集整理的c语言pi的乘法,c语言 根据公式求出π的近似值。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言比较当前日期大小,C语言判断两个日
- 下一篇: ymodem协议c语言,STC单片机IS