《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

一个号称外星人发明的求pi程序及由此引发的争鸣
程序匠人 发表于 2005-11-26 1:35:00  阅读全文 | 回复(1) | 引用通告 | 编辑

一个号称外星人发明的求pi程序及由此引发的争鸣
--------------------------------------------------------------------------------
认为是C高手的都进来[讨论]
   认为是C高手的都进来[讨论]


记得谭浩强的书中就有求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的诧异………………

 

下面有个结果的例子:

31415926535897932384626433832795028841971693993751058209749445923078164062862089

98628034825342117067982148086513282306647093844609550582231725359408128481117450

28410270193852110555964462294895493038196442881097566593344612847564823378678316

52712019091456485669234603486104543266482133936072602491412737245870066063155881

74881520920962829254091715364367892590360011330530548820466521384146951941511609

43305727036575959195309218611738193261179310511854807446237996274956735188575272

48912279381830119491298336733624406566430860213949463952247371907021798609437027

70539217176293176752384674818467669405132000568127145263560827785771342757789609

17363717872146844090122495343014654958537105079227968925892354201995611212902196

08640344181598136297747713099605187072113499999983729780499510597317328160963185

作者:metababy  发表时间:2003-01-22 12:28
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290342

   看不清楚的朋友


看不清楚的朋友:

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);}

这就是那段pi的外星人程序……………… 

 

 

 

作者:metababy  回复日期:2003-01-22 12:29
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290343

   我开始看了,还有点..


我开始看了,还有点怀疑,不过,经过分析语法,刚才,我也上机试一下,的确是天才C,,,,,,,,

我对此作者,佩服得五体投地,,,,,太厉害了,,,

版主,你可以给细细的分析一下,写出来,让大家过过瘾吗????

这么好的程序代码,真是感谢谢您放到这儿,让我们看,好东西,我们要细细的品味, 真是越看

,越觉得像陈年老酒一样,越发的香越发的淳.....

 

 

朋友们,细细的品吧,发出心里的感慨....

  真是太好了,,,极品代码,,,真的是有程序的美感,,我现在才体会到,,,,

作者:metababy  回复日期:2003-01-22 12:30
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290344

   能好好说说吗?

 

作者:天极网友  回复日期:2003-01-22 15:50
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290345

   强烈要求多发此类文章

 

作者:天极网友  回复日期:2003-02-07 10:20
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290346

   看不懂呀,在谭书中的哪呀?

 

作者:天极网友  回复日期:2003-01-22 15:53
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290347

   他写的《c程序设计》中....

 

作者:metababy  回复日期:2003-01-22 18:52
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290348

   这不过是故意买弄而已!!!!!!!!!但是其对c的熟练程度是很高的。

 

作者:天极网友  回复日期:2003-01-25 21:16
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290349

   的确很精彩,但是仔细看了一下,我觉得此代码除了占用磁盘空间比较少之外,再没有什么其它优点了


说实话,这四行代码在一些老资历的编程者看来,简直就是一碗“意大利面条”,怎么讲?“乱!”想一想,用高级语言写源代码的目的是什么?还不是为了给人看!“源代码就是给人看的,如果不想给人看懂,不如用汇编!”所以,一堆能完成任务而没几个人能看懂的代码算不上是精彩的代码,因为这样的代码维护起来极其麻烦,我敢打赌,连作者都不愿意看它一眼。再想一想,如果在一个大工程中编写的程序全都是这样的代码,万一其中有一个BUG,你调试起来多费劲啊!

这是一个误区,大家不要为缩短自己的源代码而乐此不彼,这是不值得的!!!

作者:好色的狐狸  回复日期:2003-01-26 00:26
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290350

   支持支持,顶!!!

 

作者:kkhu  回复日期:2003-02-11 09:46
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290351

   上楼,兄弟说的很好~~~!支持。

 

作者:shupao  回复日期:2003-01-26 13:40
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290352

   真的能实现吗?


   谢谢你,我会回去试的,希望你多发这样的文章

作者:天极网友  回复日期:2003-01-27 16:44
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290353

   看了大家的发言,觉得...


嗯,,,的确...这代码一般不是能轻易看明白的,,现在看来,唯一的优点,就是能够以较快的速度得到答案!不过,有位兄弟说得对---不如用汇编!而且在现在看来,速度也不在像以前那样重要了...

    从另一个角度想来,我也还是很钦佩此程序作者的天才,要是用汇编的话,恐怕更没多少人能理解了,更别说,用汇编来写更麻烦,冗长的代码,更会弄大头.....

 

好多东西,都是有两面的,,各取所好罢了,我是很喜欢这的,不过,我是不会这样写程序的,第一.我自知,写不出如此有水平的代码.第二,我没时间为了现在来说不太重要的速度,而要想一整天,来编更有效率代码....

个人看法.

作者:metababy  回复日期:2003-01-28 13:33
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290354

   但是不要忽视了程序的可读性哦?......

 

作者:天极网友  回复日期:2003-01-31 14:41
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290355

   历害。如果不运行,我绝对不知道它要做什么!

 

作者:火竹  回复日期:2003-02-01 19:33
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290356

   厉害呀!!!

 

作者:天极网友  回复日期:2003-02-08 16:55
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290357

   结果很奇怪


我用的编译器是bc31,四行代码的程序执行结果不可思议,被展开的程序运行结果正确,不知道为什么

作者:天极网友  回复日期:2003-02-09 11:13
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290358

   好,好!有意思!

 

作者:天极网友  回复日期:2003-02-09 11:33
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290359

   你用bc31,那是按c++编译的,这代码是要用c编译的。。。

 

作者:metababy  回复日期:2003-02-10 12:36
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290360

   我用的是c++编译的


呵呵,见笑见笑

作者:天极网友  回复日期:2003-02-11 09:01
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290361

   有很多人说这种代码有这样那样的缺点,不过,我是喜欢黑客编程的,从这个角度来讲,这种代码是最好的,因为效率和速度永远是我们最需求的,...


对效率的追求是永不满足的。。。。

作者:metababy  回复日期:2003-02-13 12:20
本贴地址:http://club.yesky.com/bbs/jsp/view.jsp?articleID=290362

看《匠人手记》,与匠人同行!北航出版,正在热卖!

相关日志:分析---外星人计算PI的程序
cxjr发表评论于2005-11-26 1:37:00  个人主页 | 引用 | 返回 | 删除 | 回复

cxjr分析---外星人计算PI的程序

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!