﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-精灵轶事</title><link>http://www.cppblog.com/pterosaur/</link><description>C++ Player</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:06:16 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:06:16 GMT</pubDate><ttl>60</ttl><item><title>终于回来了</title><link>http://www.cppblog.com/pterosaur/archive/2009/08/26/94468.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Wed, 26 Aug 2009 07:53:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/08/26/94468.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/94468.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/08/26/94468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/94468.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/94468.html</trackback:ping><description><![CDATA[我承认，这个是水帖....<br><br>在绕了半个中国后，终于回到了可爱的南京................<br><br>顺便祝大家节日快乐<br><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009年7月初7
<img src ="http://www.cppblog.com/pterosaur/aggbug/94468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-08-26 15:53 <a href="http://www.cppblog.com/pterosaur/archive/2009/08/26/94468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>冒个泡泡....</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/30/88934.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Tue, 30 Jun 2009 13:07:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/30/88934.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/88934.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/30/88934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/88934.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/88934.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 登记一个表格,和程序没啥关系,不相关的请忽略.权当冒泡.同轴电缆接头特性:&nbsp;                                    Connector Name                                    Frequency Range                                  ...&nbsp;&nbsp;<a href='http://www.cppblog.com/pterosaur/archive/2009/06/30/88934.html'>阅读全文</a><img src ="http://www.cppblog.com/pterosaur/aggbug/88934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-30 21:07 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/30/88934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫话数数</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/20/88192.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Sat, 20 Jun 2009 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/20/88192.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/88192.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/20/88192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/88192.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/88192.html</trackback:ping><description><![CDATA[&nbsp;
<p><strong><span>1. [笑话]</span><span>所有进制都是</span><span>10</span><span>进制</span></strong></p>
<p><span>人有十个手指头，这就奠定了人们常用的技术为</span><span>10</span><span>进制系统，数数就是这样：</span></p>
<p><span>1,2,3,4,5,6,7,8,9,10,11,12&#8230;&#8230;</span></p>
<p><span>要是人一只手只有</span><span>3</span><span>个指头，数数就成了这样：</span></p>
<p><span>1,2,3,4,5,10,11,12,13,14&#8230;&#8230;</span></p>
<p><span>其实还是</span><span>10</span><span>进制。</span></p>
<p><span>这副漫画描绘的很清楚：</span></p>
<p>&nbsp;
<div align=center src_cetemp="http://www.cppblog.com/images/cppblog_com/pterosaur/allbase10.gif"><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/pterosaur/allbase10.gif" width=297 height=255></div>
<p>&#160;</p>
<p><strong><span>2. </span><span>生活中的进制系统</span></strong></p>
<p><span>可是生活中还有好多不一样的进制：</span></p>
<p><span>1km = 1000m, 1min = 60sec, 1day = 24hour, 1yard = 3ft, 1ft = 12inch</span></p>
<p><span>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</span></p>
<p><span>计算机给我们带来了</span><span>2</span><span>进制，仅仅用</span><span>0</span><span>和</span><span>1</span><span>表示了所有的数，计算机这样数数：</span></p>
<p><span>1,10,11,100,101,110,111&#8230;&#8230;</span></p>
<p><span>因此可以想想计算机只有两根手指头。</span></p>
<p><strong><span>3.</span><span>不安分的数学家</span></strong></p>
<p><span>最不安分的是数学家，总结归纳了各种计数系统的规律，归纳出了一个通用的表达式：</span></p>
<p><span>(b<sub>n</sub>b<sub>n-1</sub>b<sub>n-2</sub>&#8230;b<sub>3</sub>b<sub>2</sub>b<sub>1</sub>b<sub>0</sub>.b<sub>-1</sub>b<sub>-2</sub>b<sub>-3</sub>&#8230;)<sub>N</sub> = </span><span>∑<sub><span>k=-</span>&#8734;<span>&#8230;n</span></sub><span>b<sub>k</sub>N<sup>p </sup>&nbsp;(N</span>为计数的进制，称之为&#8220;基&#8221;<span>)</span></span></p>
<p><span>当<span>N</span>为正整数的时候，就被称为标准<span>N</span>进制系统，为了保证数值的唯一表示<span>N</span>进制系统每一位的数值都不能超过<span>N</span>。</span></p>
<p>&nbsp;</p>
<p><span>因此就有无数种进制系统产生了。</span></p>
<p><span>最著名的要数<span>3</span>进制了。</span></p>
<p><span>以前看过一篇文章，说是计数进制使用基为<span>e</span>的进制得到的效率最高（如果存在的话），无奈<span>e</span>为无理数（<span>e</span>＝<span>2.718281828&#8230;&#8230;</span>），取较为接近的整数有出现了两种系统：<span>2</span>进制系统和<span>3</span>进制系统。现在<span>2</span>进制系统在计算机系统种占领了主导地位，但是<span>3</span>进制计算机也曾经被制造过。莫斯科国立大学就生产过</span><span>Сетунь 70 </span><span>三进制计算机，有兴趣的参看<a href="http://blog.csdn.net/phphot/archive/2009/06/18/4280867.aspx">这里</a>.<br>
<div align=center src_cetemp="/images/cppblog_com/pterosaur/setun.gif"><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/pterosaur/setun.gif" width=712 height=352></div>
<br></span>
<p>&nbsp;</p>
<p align=center><span>Сетунь 70 </span><span>结构图，懂俄文的朋友帮忙翻译下了</span></p>
<p><span>如果单单如此还好，不安分的数学家</span><span>Vittorio Grunwald</span><span>于</span><span>1885</span><span>年首次把</span><span>N</span><span>变成了负数</span><span>[Giornal di Matematiche di Battaglini 23(1885), 203~221, 367]</span><span>，他还说明了在这样的系统中如何执行四则运算，甚至讨论了如何求根。</span></p>
<p><span>一个简单的例子：</span></p>
<p align=center><span>(1234567890)<sub>10</sub> = (2846648290)<sub>-10</sub></span></p>
<p><span>有兴趣的读者可以自行转换。</span></p>
<p><span>负进制系统在上世纪<span>30</span>年代以后有了较快的发展，上世纪<span>50</span>年代后期在波兰研制了叫做<span>SKRZAT 1 </span>和<span> BINEG </span>的实验性计算机，他们都采用了<span>-2</span>作为算术运算的进制系统。</span></p>
<p><span>如果说负进制系统还不能令人惊奇的话，在进制系统总引入复数则又达到了一个新高度。</span></p>
<p><span>例如<span>2i</span>进制系统可以产生出一个称为&#8220;虚<span>4</span>&#8221;的计数系统，它有异常的特性：每一个复数都可以不带符号地用数字<span>0,1,2,3</span>来表示，例如<span>:</span></span></p>
<p align=center><span>(12231)<sub>2i</sub> = (9-10i)<sub>10</sub></span></p>
<p><span>在所有进制系统中，最美妙的应该是平衡三进制。</span></p>
<p><span>它是三进制的一种变形，用<span>-1,0,1</span>来表示各个位的权值，(据说</span><span>Сетунь 70</span><span>用的就是平衡三进制)它有许多有趣的性质：</span></p>
<p><span><span>a)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>通过交换</span><span>1</span><span>和</span><span>-1</span><span>，就可以得到一个数的相反数</span></p>
<p><span><span>b)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>一个数的正负号由他的最高位的非零的数给出</span></p>
<p><span><span>c)<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>四舍五入运算被简化成了截断运算</span></p>
<p><span>另外有个数学难题</span><span>&#8221;Bachet</span><span>重量问题</span><span>&#8221;</span><span>就可以通过平衡三进制来解决：</span></p>
<p><span>题目如下：现有一个天平，要称出</span><span>1-N</span><span>内所有整数重量的东西，最少需要几个砝码，每个砝码的重量是多少？</span></p>
<p><span>进制系统最登峰造极的高度是引入了无理进制，具体详情情参考</span><span>W.Parry</span><span>的论文</span><span>[Acta Math. Acad. Sci. Hung. 11 (1960), 401~416]</span><span>。</span></p>
<p><span>另外除了单一进制系统外还可以将计数方法推广为混合进制系统。</span></p>
<span>最重要的混合进制系统就是阶乘数系，另外我们每天都要面对的时间也是混合进制系统。</span> 
<img src ="http://www.cppblog.com/pterosaur/aggbug/88192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-20 21:03 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/20/88192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求平方根倒数的算法</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/19/88111.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Fri, 19 Jun 2009 09:16:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/19/88111.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/88111.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/19/88111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/88111.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/88111.html</trackback:ping><description><![CDATA[[转自<a href="http://yueweitang.org/blog/posts/inverse-square-root-algorithm-analysis.html"><u><font color=#0000ff>http://yueweitang.org/blog/posts/inverse-square-root-algorithm-analysis.html</font></u></a>]<br><br><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 16px Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="TEXT-ALIGN: left; FONT-FAMILY: Verdana; FONT-SIZE: 15px" class=Apple-style-span>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">下面这个求<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=1/\sqrt{x} src="http://yueweitang.org/blog/wp-content/cache/tex_c316ab9d453dd89c01a6fdb29cfb28de.png">的函数号称比直接调用sqrt库函数快4倍，来自游戏Quake III的源代码。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_22_177_Open_Image onclick="this.style.display='none'; Codehighlighter1_22_177_Open_Text.style.display='none'; Codehighlighter1_22_177_Closed_Image.style.display='inline'; Codehighlighter1_22_177_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_22_177_Closed_Image onclick="this.style.display='none'; Codehighlighter1_22_177_Closed_Text.style.display='none'; Codehighlighter1_22_177_Open_Image.style.display='inline'; Codehighlighter1_22_177_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;InvSqrt(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_22_177_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_22_177_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;xhalf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5f</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x5f3759df</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">1.5f</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;xhalf&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;x);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br>我们这里分析一下它的原理（指程序的正确性，而不是解释为何快）。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">分析程序之前，我们必须解释一下float数据在计算机里的表示方式。一般而言，一个float数据<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=x src="http://yueweitang.org/blog/wp-content/cache/tex_9dd4e461268c8034f5c8564e155c67a6.png">共32个bit，和int数据一样。其中前23位为有效数字<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=M_x src="http://yueweitang.org/blog/wp-content/cache/tex_832cab6245118c67b73c5ef0be7cf7e8.png">，后面接着一个8位数据<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=E_x src="http://yueweitang.org/blog/wp-content/cache/tex_893be2279f4c4bc665184cf9f87da90c.png">表示指数，最后一位表示符号，由于这里被开方的数总是大于0，所以我们暂不考虑最后一个符号位。此时</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt="x=1.M_x 2^{E_x-127} " src="http://yueweitang.org/blog/wp-content/cache/tex_1e4110c15e61979363c8a50c9be6667c.png"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">如果我们把计算机内的浮点数<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=x src="http://yueweitang.org/blog/wp-content/cache/tex_9dd4e461268c8034f5c8564e155c67a6.png">看做一个整数<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_x src="http://yueweitang.org/blog/wp-content/cache/tex_e0c12d615090d3574f32ebeab63f5601.png">，那么</p>
<p style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt="I_x = 2^{23}E_x+M_x " src="http://yueweitang.org/blog/wp-content/cache/tex_104440c83c5fffbe38f981757bd33978.png"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">现在开始逐步分析函数。这个函数的主体有四个语句，分别的功能是：</p>
<blockquote style="BORDER-BOTTOM: black 1px dotted; BORDER-LEFT: black 1px dotted; PADDING-BOTTOM: 5px; BACKGROUND-COLOR: rgb(238,238,238); MARGIN: 1em auto 0px; PADDING-LEFT: 7px; WIDTH: 591px; PADDING-RIGHT: 7px; BORDER-TOP: black 1px dotted; BORDER-RIGHT: black 1px dotted; PADDING-TOP: 5px">
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><span style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(0,0,255); PADDING-TOP: 0px">int</span><span class=Apple-converted-space>&nbsp;</span>i = *(<span style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(0,0,255); PADDING-TOP: 0px">int</span>*)&amp;x; 这条语句把<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 2px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=x src="http://yueweitang.org/blog/wp-content/cache/tex_9dd4e461268c8034f5c8564e155c67a6.png">转成<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=i=I_x src="http://yueweitang.org/blog/wp-content/cache/tex_1efc275e97e02ac108c7836caad83cc0.png">。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">i = 0&#215;5f3759df - (i&gt;&gt;1); 这条语句从<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_x src="http://yueweitang.org/blog/wp-content/cache/tex_e0c12d615090d3574f32ebeab63f5601.png">计算<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_{1/\sqrt{x}} src="http://yueweitang.org/blog/wp-content/cache/tex_ed49444b7e57c2fc4dfc8f056fae6bc4.png">。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">y = *(<span style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(0,0,255); PADDING-TOP: 0px">float</span>*)&amp;i; 这条语句将<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_{1/\sqrt{x}} src="http://yueweitang.org/blog/wp-content/cache/tex_ed49444b7e57c2fc4dfc8f056fae6bc4.png">转换为<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=1/\sqrt{x} src="http://yueweitang.org/blog/wp-content/cache/tex_c316ab9d453dd89c01a6fdb29cfb28de.png">。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">y = y*(1.5f - xhalf*y*y); 这时候的y是近似解；此步就是经典的牛顿迭代法。迭代次数越多越准确。</p>
</blockquote>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">关键是第二步 i = 0x5f3759df - (i&gt;&gt;1); 这条语句从<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_x src="http://yueweitang.org/blog/wp-content/cache/tex_e0c12d615090d3574f32ebeab63f5601.png">计算<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=I_{1/\sqrt{x}} src="http://yueweitang.org/blog/wp-content/cache/tex_ed49444b7e57c2fc4dfc8f056fae6bc4.png">，原理:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">令<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=y=1/\sqrt{x} src="http://yueweitang.org/blog/wp-content/cache/tex_aa1b97bb7383597663a51e7ad5b0da35.png">，用<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=x=(1+m_x)2^{e_x} src="http://yueweitang.org/blog/wp-content/cache/tex_1759e9f3f5a3125e49343a92a2b7cf7c.png">和<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=y=(1+m_y)2^{e_y} src="http://yueweitang.org/blog/wp-content/cache/tex_8a525bf37b169a440892a25eb7403799.png">带入之后两边取对数，再利用近似表示<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt="\log_2(1+z)\sim z+\delta" src="http://yueweitang.org/blog/wp-content/cache/tex_ea3d4f8b071da0aba0556f4b7de23443.png">，算一算就得到</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="TEXT-ALIGN: center; PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt="I_y = \frac{2}{3}(127-\delta)2^{23}-I_x/2 " src="http://yueweitang.org/blog/wp-content/cache/tex_97c1e31a970b3aae9c98ba334dd4c151.png"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.6em; MARGIN: 1em 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">若取<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=\delta=0.0450465679168701171875 src="http://yueweitang.org/blog/wp-content/cache/tex_322863072b22b9062d0ad72cb98692f7.png">，<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=\frac{2}{3}(127-\delta)2^{23} src="http://yueweitang.org/blog/wp-content/cache/tex_5c30a3072abd9f51847218d4ddede824.png">就是程序里所用的常量0x5f3759df。至于为何选择这个<img style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-BOTTOM: 1px; MARGIN: 0px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; VERTICAL-ALIGN: middle; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" class=tex alt=\delta src="http://yueweitang.org/blog/wp-content/cache/tex_77a3b715842b45e440a5bee15357ad29.png">，则应该是曲线拟合实验的结果。<br><br>2003年Chris Lomont还写了一篇<a href="http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf"><u><font color=#1177aa>文章</font></u></a>对这些代码进行了分析，有兴趣的读者可以下载阅读。</p>
</span></span>
<img src ="http://www.cppblog.com/pterosaur/aggbug/88111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-19 17:16 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/19/88111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>明天出发..............</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/06/86942.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Sat, 06 Jun 2009 12:48:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/06/86942.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/86942.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/06/86942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/86942.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/86942.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;明天开始今年的第三次北京之行<br>祝自己一帆风顺..............<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">＃include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img id=Codehighlighter1_29_55_Open_Image onclick="this.style.display='none'; Codehighlighter1_29_55_Open_Text.style.display='none'; Codehighlighter1_29_55_Closed_Image.style.display='inline'; Codehighlighter1_29_55_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_29_55_Closed_Image onclick="this.style.display='none'; Codehighlighter1_29_55_Closed_Text.style.display='none'; Codehighlighter1_29_55_Open_Image.style.display='inline'; Codehighlighter1_29_55_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_29_55_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_29_55_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">一帆风顺!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<img src ="http://www.cppblog.com/pterosaur/aggbug/86942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-06 20:48 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/06/86942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python Lambda 排序</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/01/86415.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Mon, 01 Jun 2009 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/01/86415.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/86415.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/01/86415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/86415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/86415.html</trackback:ping><description><![CDATA[用Python的Lambda运算定义的归并排序算法：<br>记录如下：<br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">def</span><span style="COLOR: #000000">&nbsp;qsort():<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">lambda</span><span style="COLOR: #000000">&nbsp;f,&nbsp;v1,&nbsp;v2&nbsp;:&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;([]&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;len(v2)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;0&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;v2[0:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;f(f,&nbsp;v1,&nbsp;v2[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:len(v2)]))&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;len(v1)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;v1[0:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">f(f,v1[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:len(v1)],v2)&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;len(v2)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;0&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;v1[0:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">f(f,v1[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:len(v1)],v2)&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;v1[0]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">v2[0]&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;v2[0:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">f(f,v1,v2[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">:len(v2)]);<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">lambda</span><span style="COLOR: #000000">&nbsp;f,&nbsp;c,&nbsp;arr&nbsp;:\<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;len(arr)&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;\<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c(c,&nbsp;f(f,&nbsp;c,&nbsp;arr[0:int(len(arr)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)]),&nbsp;f(f,&nbsp;c,&nbsp;arr[int(len(arr)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">):len(arr)]));<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">lambda</span><span style="COLOR: #000000">&nbsp;arr&nbsp;:&nbsp;q(q,c,arr);<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<br>效率很低，<br>如有更好的算法，请高手赐教<img border=0 align=absMiddle src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emsmile.gif">
<img src ="http://www.cppblog.com/pterosaur/aggbug/86415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-01 15:22 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/01/86415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>儿童节快乐</title><link>http://www.cppblog.com/pterosaur/archive/2009/06/01/86372.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Mon, 01 Jun 2009 03:38:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/06/01/86372.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/86372.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/06/01/86372.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/86372.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/86372.html</trackback:ping><description><![CDATA[<p>祝大家儿童节快乐！<br><br></p>
<p><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/pterosaur/childrenday.jpg" width=230 height=198></p>
<p><br>&nbsp;</p>
<img src ="http://www.cppblog.com/pterosaur/aggbug/86372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-06-01 11:38 <a href="http://www.cppblog.com/pterosaur/archive/2009/06/01/86372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++算法（1） 连续正整数的和</title><link>http://www.cppblog.com/pterosaur/archive/2009/05/31/86303.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Sun, 31 May 2009 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/05/31/86303.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/86303.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/05/31/86303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/86303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/86303.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 16px Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span>题记：本文为第一篇技术贴<br>题目：给定一个输入的正整数X，求出X的所有可以被表示为 n(n&gt;=2) 个连续正整数之和的形式：<br>如：15＝15＝7+8＝4+5+6＝1+2+3+4+5<br>（该题目可以说是骨灰级的题目了，我做了简单的改变，便于分析）<br>程序的实现（改方法是我能想到的最简单的一种了,如有更快的，请各位赐教）<br><br>程序代码：<br></span>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_10_323_Open_Image onclick="this.style.display='none'; Codehighlighter1_10_323_Open_Text.style.display='none'; Codehighlighter1_10_323_Closed_Image.style.display='inline'; Codehighlighter1_10_323_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_10_323_Closed_Image onclick="this.style.display='none'; Codehighlighter1_10_323_Closed_Text.style.display='none'; Codehighlighter1_10_323_Open_Image.style.display='inline'; Codehighlighter1_10_323_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_10_323_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_10_323_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;exist&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Please&nbsp;input&nbsp;x:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x);<br><img id=Codehighlighter1_122_288_Open_Image onclick="this.style.display='none'; Codehighlighter1_122_288_Open_Text.style.display='none'; Codehighlighter1_122_288_Closed_Image.style.display='inline'; Codehighlighter1_122_288_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_122_288_Closed_Image onclick="this.style.display='none'; Codehighlighter1_122_288_Closed_Text.style.display='none'; Codehighlighter1_122_288_Open_Image.style.display='inline'; Codehighlighter1_122_288_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;n&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">&nbsp;n)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_122_288_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_122_288_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_194_285_Open_Image onclick="this.style.display='none'; Codehighlighter1_194_285_Open_Text.style.display='none'; Codehighlighter1_194_285_Closed_Image.style.display='inline'; Codehighlighter1_194_285_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_194_285_Closed_Image onclick="this.style.display='none'; Codehighlighter1_194_285_Closed_Text.style.display='none'; Codehighlighter1_194_285_Open_Image.style.display='inline'; Codehighlighter1_194_285_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;n&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(n&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;x)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_194_285_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_194_285_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;a&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">exist)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">none\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<br>可是题目并没有在此结束，<br>如果计算n的所有表示方式的种类数（记为k(n)），有如下序列(n=1..20)：<br>1, 1, 2, 1, 2, 2, 2, 1, 3, 2, 2, 2, 2, 2, 4, 1, 2, 3, 2, 2<br>通过搜索，发现这个序列还有其他的含义：<br>1. Number of odd divisors of n;<br>2. Number of ways to write n as difference of two triangular numbers;<br>3. Number of ways to arrange n identical objects in a trapezoid;<br>4. Number of sums of sequences of consecutive positive integers including sequences of length 1;<br>5. Number of factors in the factorization of the Chebyshev polynomial of thee first kind T_n(x);<br>6. Number of ways to present n as sum of consecutive integers;<br>7. Number of factors in the factorization of the polynomial x^n+1 over the integers.<br>其中4就是程序所描述的方式。其描述很特别，尤其是第一个。很惊异其中的关系。<br>搞了很久也不知道其中的缘由，请各位赐教。<img border=0 align=absMiddle src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emrose.gif"><br>
<img src ="http://www.cppblog.com/pterosaur/aggbug/86303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-05-31 19:55 <a href="http://www.cppblog.com/pterosaur/archive/2009/05/31/86303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++Blog 申请成功，庆祝一下！</title><link>http://www.cppblog.com/pterosaur/archive/2009/05/30/86182.html</link><dc:creator>pterosaur</dc:creator><author>pterosaur</author><pubDate>Sat, 30 May 2009 08:08:00 GMT</pubDate><guid>http://www.cppblog.com/pterosaur/archive/2009/05/30/86182.html</guid><wfw:comment>http://www.cppblog.com/pterosaur/comments/86182.html</wfw:comment><comments>http://www.cppblog.com/pterosaur/archive/2009/05/30/86182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pterosaur/comments/commentRss/86182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pterosaur/services/trackbacks/86182.html</trackback:ping><description><![CDATA[博客第一帖。<br><br>对社区的办事效率表示赞赏
<img src ="http://www.cppblog.com/pterosaur/aggbug/86182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pterosaur/" target="_blank">pterosaur</a> 2009-05-30 16:08 <a href="http://www.cppblog.com/pterosaur/archive/2009/05/30/86182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>