| |||
| C 代码:
记得以前有人贴过的,还被我说很丑的程序,后来发现是混沌大赛的作品。 |
| ||||
| 引用:
http://www.ioccc.org/ |
| |||
| 来自 [url=http://hi.baidu.com/digiter/blog/item/c2b6d801c2ce6cd5277fb590.html] #include <stdio.h> #include <math.h> #define PI 3.141592654 #define k 1e-7 // pi/4=1-1/3+1/5-1/7... double pi1() { double sum1=0, sum2, n=1, s=1; do { sum2 = sum1; sum1 += s / n; s *= -1; n += 2; }while (fabs(4 * sum1 - 4 * sum2) > k); return 4 * sum1; } // pi*pi/6=1/1*1 + 1/2*2 + 1/3*3 + 1/4*4... double pi2() { double n=1, sum1=0, sum2; do { sum2 = sum1; sum1 += 1 / (n * n); n += 1; }while (fabs(sqrt(6 * sum1) - sqrt(6 * sum2)) > k); return sqrt(6 * sum1); } // pi/6=1/2 + (1/2)*(1/3)*(1/2)^3 + (1/2*3/4)*(1/5)*(1/2)^5 + (1/2*3/4*5/6)*1/7*(1/2)^7... double pi3() { double sum1=0.5, sum2, i=1, a=0.5, b=1/3.0, c=0.5*0.5*0.5; do { sum2 = sum1; sum1 += a*b*c; i += 1; a *= ((i + i - 1)/(i + i)); b = 1 /(i + i + 1); c *= 0.5 * 0.5; }while (fabs(6 * sum1 - 6 * sum2) > k); return 6 * sum1; } // pi/2=2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7 * 8/7 * 8/9... double pi4() { double sum1=1, sum2, t=2; do { sum2 = sum1; sum1 *= t / (t - 1); sum1 *= t / (t + 1); t += 2; }while (fabs(2 * sum1 - 2 * sum2) > k); return 2 * sum1; } int main() { printf("%.9lf\n", pi1()); printf("%.9lf\n", pi2()); printf("%.9lf\n", pi3()); printf("%.9lf\n", pi4()); printf("%.9lf\n", acos(-1)); getchar(); return 0; } 输出: 3.141592704 3.141283750 3.141592647 3.141312517 3.141592654 |