«June 2019»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告

本站技术贴除标明为“原创”的之外,其余均为网上转载,文中我会尽量保留原作者姓名,若有侵权请与我联系,我将第一时间做出修改。谢谢!

             ——既瑜


天气预报(南京)


我的分类(专题)

首页(183)
【趣味文摘】(22)
【五子连珠】(13)
【技术文档】(136)
【电脑技术】(6)
【疑难问题】(1)
【我的心情】(5)


最新日志
花语(中英文对照版)
各种花的花语
NTFS格式的7个精彩问答(pconli
童言无忌,有趣得一蹋
给MM修电脑的三个步骤[转载]
J2EE 面试题综合
JAVA编程规则
[转] P2P之UDP穿透NAT的原理与
[转]词法分析器
文件加密技术
一个让人发狂的PI求解C程序
[转]直线生成算法之DDA
[转]利用内核对象----互斥量实现应用
[转]如何正确的计算文件收发进度
双机调试VC程序
[转]分治法优化大整数乘法 C++实现
浮点数值的内存结构
[转]双链表实现大整数的加法与乘法[VC
拜占廷将军问题[转]
某人的挂QQ的程序源代码,虽然没用了,拿

最新回复
回复:vc中的CString的操作
回复:[转]分治法优化大整数乘法 C++
回复:[转]分治法优化大整数乘法 C++
回复:花语(中英文对照版)
回复:基本排序算法比较与选择[转载]
回复:c++中强制类型转换操作符小结
回复:c++中强制类型转换操作符小结
何必那么执着于是大头猫还是愤怒的小鸟,淡
回复:浮点数值的内存结构
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:32位位图到24位位图的转换
dren, ages 16 and 20
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:花语(中英文对照版)
回复:各种花的花语

留言板
签写新留言

不是0-1背包喔
桂花的花语``
谢谢
提议
提议

统计
blog名称:★既瑜★
日志总数:183
评论数量:636
留言数量:-25
访问次数:1339505
建立时间:2005年3月12日

链接


http://www.nju.edu.cn
http://bbs.nju.edu.cn 
http://www.t7-online.com
http://www.csdn.net
http://www.91f.net
http://www.crsky.com
我的MSN BLOG 

联系我

  OICQ:215768265
  njucs2001@hotmail.com
  erichoo1982@gmail.com

 

W3CHINA Blog首页    管理页面    写新日志    退出


[【技术文档】]一个让人发狂的PI求解C程序
既瑜(224499) 发表于 2005-11-25 21:33:43

一个让人发狂的PI求解C程序 作者: 张桂权 long a=10000, b, c=2800, d, e, f[2801], g; main{ for(;b-c;) f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; d*=b); scanf("%s");} 简短的4行代码,就可以精确计算机出800位的PI(圆周率)值。实在太震撼人心了。这样的程序也能运行,竟然还能能完成这样让人难以置信的任务,真是太神了。真让人百思不知其解了。不知道它是采用了哪一个级数公式,收敛速度如此之快?在《程序员》第十一期中还专门提供了这个程序源码。喜欢挑战的朋友请来试一试哦? 这是某一年The International Obfuscated C Code Contest(国际模糊C代码大赛)上的获奖作品(努力了,但是没有找到一个确切的时间)。这是属于C大师的盛会,因为这是一件极具挑战的活儿。 这是Linux/Unix/... 下的版本,需要更改才能在Windows平台上运行。 The International Obfuscated C Code Contest 的目标是: 在以下几条规则的前提下,编写晦涩难懂的(模糊的、混乱的)C程序。1、通过一种讽刺的手段,来说明编程风格的重要性;2、用怪异的代码来调试C编译器;3、举例说明一些C语言的薄弱或精明之处;4、为脆弱的C代码提供一个安全的讨论会。 Goals of the Contest Obfuscate: tr.v. -cated, -cating, -cates. 1. a. To render obscure. b. To darken. 2. To confuse: his emotions obfuscated his judgment. [LLat. obfuscare, to darken : ob(intensive) + Lat. fuscare,to darken < fuscus, dark.] -obfuscation n. obfuscatory adj To write the most Obscure/Obfuscated C program under the rules below. To show the importance of programming style, in an ironic way. To stress C compilers with unusual code. To illustrate some of the subtleties of the C language. To provide a safe forum for poor C code. :-) 请访问下面的官方网站,如果希望了解更多的相关信息。 http://www.ioccc.org/http://www.au.ioccc.org/ Pi to one MILLION decimal places http://3.141592653589793238462643383279502884197169399375105820974944592.com/ 二、 以下是另一个版本的程序。一样晦涩难懂。(1988年) Here's another good one: /* * Program to compute an approximation of pi * by Brian Westley, 1988 * (requires pcc macro concatenation; try gcc -traditional-cpp) */ #define _ -F<00||--F-OO--;int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO(){            _-_-_-_       _-_-_-_-_-_-_-_-_    _-_-_-_-_-_-_-_-_-_-_-_  _-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_ _-_-_-_-_-_-_-_-_-_-_-_-_-_-_  _-_-_-_-_-_-_-_-_-_-_-_-_-_    _-_-_-_-_-_-_-_-_-_-_-_        _-_-_-_-_-_-_-_            _-_-_-_} http://www.comedia.com/hot/jargon-4.2.3/html/entry/Obfuscated-C-Contest.html 这个程序更有意思了,可惜我还不明白其中的原理。希望大家讨论一下,谢谢 !

阅读全文(9844) | 回复(1) | 编辑 | 精华

回复:一个让人发狂的PI求解C程序
既瑜(224499)发表评论于2005-11-25 21:52:36

一个牛人对外星人程序的破解: 记得谭浩强的书中就有求pi的公式………… 4/1pi=1+1/3-1/5+1/7-1/9………………(不知道有没错哦,很久不看了) 这样的公式求pi,你能算到几位,而且时间花得很多,代码也很长……(数位都不够) 在Obfuscated C Contest佳作选录中有一代码…………(被后人称为外星人程序,因为作者没有留下姓名) 只用4行代码(包括声明变量,函数),可轻松算到pi的800位………… 实在令人叹服,我想,不关是我,就连看这篇文章的各位,一辈子都不可能写出这样的文章…………(不是我吹牛……) 浅浅分析一下,这篇文章的数学技巧不高,但是编程技巧实在是……………… 下面列出此外星人程序………………………………………… long a=10000,b,c=2800,d,e,f[2801],g; main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);} 有人分析过,展开得到的程序是………… long b,c=2800,d,e,f[2801],g; int main(int argc,char* argv[]) { /*for(;b-c;)f[b++]=10000/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/10000),e=d%10000) for(b=c;d+=f[b]*10000,f[b]=d%--g,d/=g--,--b;d*=b);*/ for(b=0;b<c;b++) f[b] = 2; e=0; while(c > 0) { d=0; for(b=c;b>0;b--) { d*=b; d+=f[b]*10; f[b]=d%(b*2-1); d/=(b*2-1); } c-=1; printf("%d",(e+d/10)%10); e=d%10; } return 0; } 这pi代码的计算数学公式是…… f(1)=1 f(n+1)=f(n)*n/(2*n+1) PI/2=f(1)+f(2)+f(3)+.....+f(n) n->无穷大。 或: PI/2 = 1 + 1/3 + (1*2)/(3*5) + (1*2*3)/(3*5*7) + (1*2*3*4)/(3*5*7*9)+... …………………………………………………………………… 有兴趣的朋友可以自己试试,不过可以告诉大家,在不同的编译条件下得到的结果可能不同,i++与++i的诧异……………… 下面有个结果的例子: 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185 ……

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除

» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144283877 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号