﻿<?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/svmsung/</link><description>一心编程，就没有解决不了的问题</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 08:02:34 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 08:02:34 GMT</pubDate><ttl>60</ttl><item><title>cout问题</title><link>http://www.cppblog.com/svmsung/archive/2010/10/08/128969.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Thu, 07 Oct 2010 16:06:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2010/10/08/128969.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/128969.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2010/10/08/128969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/128969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/128969.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: cout遇到的这个小问题，主要有两点值得注意：其一，参数入栈的顺序在c++默认调用约定下是从右向左的；其二，第一趟将每个参数计算出当前参数表达式的值。另外，当我们发现有些问题不好理解时候，最好的方法就是查看反汇编代码。&nbsp;&nbsp;<a href='http://www.cppblog.com/svmsung/archive/2010/10/08/128969.html'>阅读全文</a><img src ="http://www.cppblog.com/svmsung/aggbug/128969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2010-10-08 00:06 <a href="http://www.cppblog.com/svmsung/archive/2010/10/08/128969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断单链表是否有环</title><link>http://www.cppblog.com/svmsung/archive/2010/09/24/127499.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Fri, 24 Sep 2010 04:30:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2010/09/24/127499.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/127499.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2010/09/24/127499.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/127499.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/127499.html</trackback:ping><description><![CDATA[<p>&nbsp;</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 align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">typedef&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;LNode<br /><img id="Codehighlighter1_21_48_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_48_Open_Text.style.display='none'; Codehighlighter1_21_48_Closed_Image.style.display='inline'; Codehighlighter1_21_48_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_21_48_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_21_48_Closed_Text.style.display='none'; Codehighlighter1_21_48_Open_Image.style.display='inline'; Codehighlighter1_21_48_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></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_21_48_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_21_48_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;data;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;LNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">next;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">LNode&nbsp;;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" />typedef&nbsp;LNode</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;LinkList;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">单链表有环返回true&nbsp;否则返回false</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;is_looplist(LNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">head)<br /><img id="Codehighlighter1_136_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_490_Open_Text.style.display='none'; Codehighlighter1_136_490_Closed_Image.style.display='inline'; Codehighlighter1_136_490_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_136_490_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_136_490_Closed_Text.style.display='none'; Codehighlighter1_136_490_Open_Image.style.display='inline'; Codehighlighter1_136_490_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></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_136_490_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_136_490_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;LNode&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">fast,</span><span style="color: #000000">*</span><span style="color: #000000">slow;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(head&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;head</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;NULL)<br /><img id="Codehighlighter1_200_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_219_Open_Text.style.display='none'; Codehighlighter1_200_219_Closed_Image.style.display='inline'; Codehighlighter1_200_219_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_200_219_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_200_219_Closed_Text.style.display='none'; Codehighlighter1_200_219_Open_Image.style.display='inline'; Codehighlighter1_200_219_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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_200_219_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_200_219_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">slow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;head;fast&nbsp;<span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span>head-&gt;next;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br /><img id="Codehighlighter1_257_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_257_488_Open_Text.style.display='none'; Codehighlighter1_257_488_Closed_Image.style.display='inline'; Codehighlighter1_257_488_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_257_488_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_257_488_Closed_Text.style.display='none'; Codehighlighter1_257_488_Open_Image.style.display='inline'; Codehighlighter1_257_488_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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_257_488_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_257_488_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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">fast&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">fast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next)<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">为了防止fast跨过slow的情况，在每次判断的时候比较当前节点和下一节点</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(fast&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;slow&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;fast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;slow)<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_417_485_Open_Image" onclick="this.style.display='none'; Codehighlighter1_417_485_Open_Text.style.display='none'; Codehighlighter1_417_485_Closed_Image.style.display='inline'; Codehighlighter1_417_485_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_417_485_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_417_485_Closed_Text.style.display='none'; Codehighlighter1_417_485_Open_Image.style.display='inline'; Codehighlighter1_417_485_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="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_417_485_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_417_485_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slow&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;slow</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next;</span><span style="color: #008000">//</span><span style="color: #008000">一次跳一步</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fast&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fast</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next</span><span style="color: #000000">-&gt;</span><span style="color: #000000">next;</span><span style="color: #008000">//</span><span style="color: #008000">一次跳两步</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /></span><span style="color: #000000">&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"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br />如果要返回环的入口节点<br />一种效率比较低的方法是<br />一个指针p1从表头开始，指针p2 初始化为判环时找到的指针，p1每前进一步，由p2遍历一次环中各结点，遍历过程中每次都要判断p1是否p2<br />当p2 == fast时候，p1 = p1.next，继续循环。这样肯定能找到入口，但是效率为O(n^2) <img src ="http://www.cppblog.com/svmsung/aggbug/127499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2010-09-24 12:30 <a href="http://www.cppblog.com/svmsung/archive/2010/09/24/127499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求数组子数组之和的最大值和子数组位置</title><link>http://www.cppblog.com/svmsung/archive/2010/07/18/120704.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Sun, 18 Jul 2010 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2010/07/18/120704.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/120704.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2010/07/18/120704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/120704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/120704.html</trackback:ping><description><![CDATA[<p>这个问题源于《编程之美》2.14 求数组的子数组之和的最大值扩展问题2<br><br>输出子数组的最大和同时输出子数组下标，时间复杂度为<em>O(N)<br></em>源码：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">startPos&nbsp;最大和子数组的起始位置&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">endPos&nbsp;最大和子数组的结束位置&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MaxSum(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">A,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">startPos,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">endPos)<br><img id=Codehighlighter1_140_421_Open_Image onclick="this.style.display='none'; Codehighlighter1_140_421_Open_Text.style.display='none'; Codehighlighter1_140_421_Closed_Image.style.display='inline'; Codehighlighter1_140_421_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_140_421_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_140_421_Closed_Text.style.display='none'; Codehighlighter1_140_421_Open_Image.style.display='inline'; Codehighlighter1_140_421_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_140_421_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_140_421_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;tmpStart&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nStart&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;A[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nAll&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;A[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_223_383_Open_Image onclick="this.style.display='none'; Codehighlighter1_223_383_Open_Text.style.display='none'; Codehighlighter1_223_383_Closed_Image.style.display='inline'; Codehighlighter1_223_383_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_223_383_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_223_383_Closed_Text.style.display='none'; Codehighlighter1_223_383_Open_Image.style.display='inline'; Codehighlighter1_223_383_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_223_383_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_223_383_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(nStart&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_244_279_Open_Image onclick="this.style.display='none'; Codehighlighter1_244_279_Open_Text.style.display='none'; Codehighlighter1_244_279_Closed_Image.style.display='inline'; Codehighlighter1_244_279_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_244_279_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_244_279_Closed_Text.style.display='none'; Codehighlighter1_244_279_Open_Image.style.display='inline'; Codehighlighter1_244_279_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_244_279_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_244_279_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nStart&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nStart&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;A[i];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nStart</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">nAll)<br><img id=Codehighlighter1_320_380_Open_Image onclick="this.style.display='none'; Codehighlighter1_320_380_Open_Text.style.display='none'; Codehighlighter1_320_380_Closed_Image.style.display='inline'; Codehighlighter1_320_380_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_320_380_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_320_380_Closed_Text.style.display='none'; Codehighlighter1_320_380_Open_Image.style.display='inline'; Codehighlighter1_320_380_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_320_380_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_320_380_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nAll&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nStart;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpStart&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;startPos;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;startPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;tmpStart;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nAll;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_434_675_Open_Image onclick="this.style.display='none'; Codehighlighter1_434_675_Open_Text.style.display='none'; Codehighlighter1_434_675_Closed_Image.style.display='inline'; Codehighlighter1_434_675_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_434_675_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_434_675_Closed_Text.style.display='none'; Codehighlighter1_434_675_Open_Image.style.display='inline'; Codehighlighter1_434_675_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_434_675_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_434_675_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_451_478_Open_Image onclick="this.style.display='none'; Codehighlighter1_451_478_Open_Text.style.display='none'; Codehighlighter1_451_478_Closed_Image.style.display='inline'; Codehighlighter1_451_478_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_451_478_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_451_478_Closed_Text.style.display='none'; Codehighlighter1_451_478_Open_Image.style.display='inline'; Codehighlighter1_451_478_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;arr[</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_451_478_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_451_478_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;startP&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,endP&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;maxsubArrSumValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;maxsubArrSumValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MaxSum(arr,</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">,startP,endP);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">maxsubArrSumValue</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">startP</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endP</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/svmsung/aggbug/120704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2010-07-18 16:37 <a href="http://www.cppblog.com/svmsung/archive/2010/07/18/120704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速判断素数算法</title><link>http://www.cppblog.com/svmsung/archive/2010/07/16/120584.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Fri, 16 Jul 2010 13:40:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2010/07/16/120584.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/120584.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2010/07/16/120584.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/120584.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/120584.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <strong>引理：</strong>如果 <em>a</em> 是一个大于1的整数，而所有小于或等于根号<em> a</em>&nbsp;&nbsp;的素数都除不尽 <em>a</em> ，则 <em>a</em> 是素数。<br>理想的判断素数的方法应该是将所有小于或等于根号n的素数去除n，但是n是一个随机大于1的整数，小于这个数的平方根的素数表不好给定。下面介绍的方法，本意是动态的构建素数表，但是引入了很多冗余的除数。<br><br>代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;prime&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num)<br><img id=Codehighlighter1_21_744_Open_Image onclick="this.style.display='none'; Codehighlighter1_21_744_Open_Text.style.display='none'; Codehighlighter1_21_744_Closed_Image.style.display='inline'; Codehighlighter1_21_744_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_21_744_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_21_744_Closed_Text.style.display='none'; Codehighlighter1_21_744_Open_Image.style.display='inline'; Codehighlighter1_21_744_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_21_744_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_21_744_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&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;num&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;num&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&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;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;num&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;unsigned&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;maxc&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;(sqrt&nbsp;(num));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(c&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;maxc)<br><img id=Codehighlighter1_241_727_Open_Image onclick="this.style.display='none'; Codehighlighter1_241_727_Open_Text.style.display='none'; Codehighlighter1_241_727_Closed_Image.style.display='inline'; Codehighlighter1_241_727_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_241_727_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_241_727_Closed_Text.style.display='none'; Codehighlighter1_241_727_Open_Image.style.display='inline'; Codehighlighter1_241_727_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_241_727_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_241_727_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(num&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;c&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>分析：<br>　　相对于sqrt(n)次除，上面的程序需要sqrt(n)*8/30次除，效率提升了15/4倍。<br>　　自然数n，我们假设小于n的素数数F(n),F(n)的分布规律为：当n趋向于无穷大时，F(n)/(x/logx) = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，动态的冗余度近似为：(sqrt(n)*4/15-x/logx)/sqrt(n)*4/15 <br><br>其他更好的判断素数的算法，希望你能给我留言或者写在评论上，谢谢！
<img src ="http://www.cppblog.com/svmsung/aggbug/120584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2010-07-16 21:40 <a href="http://www.cppblog.com/svmsung/archive/2010/07/16/120584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>时间统计的几种方法</title><link>http://www.cppblog.com/svmsung/archive/2010/07/13/120275.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Tue, 13 Jul 2010 15:03:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2010/07/13/120275.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/120275.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2010/07/13/120275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/120275.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/120275.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 申明：Blog上的文章只是个人学习的一些记录和总结，这些记录部分来自于网络，加上自己的一些理解，有些已经找不到最原始的出处了，在此对大牛们的贡献表示感谢，如有侵权的地方，请通知我，我会尽快删除。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对关注性能的程序开发人员而言，一个好的计时部件既是益友，也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程，又是一件有力的调试武器，在有经验的程序员手里可以尽快的确定程序的性能瓶颈，或者对不同的算法作出有说服力的性能比较。GPU程序性能瓶颈测试，比较常用的工具是NVIDIA PerfHUD ，它能准确测量出渲染管线的每个阶段消耗的时间，从时间轴上可以很明显的看出在渲染一帧是，渲染瓶颈在哪个阶段，从而根据具体情况进行优化。CPU程序性能分析工具，Intel公司的 VTune在业界比较常用，一直想用，还没试过。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然而下面将要介绍的，从网上搜集到的一些关于程序代码段时间统计函数，用于单个算法的性能分析，比上面提及的工具，更加方便，轻量，易用，根据你对时间统计的精度要求，选择不同的时间统计函数。<br>1.C语言时间库&lt;time.h&gt;的clock()函数<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">unsigned&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;sTime,eTime;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dTime;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>sTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;click();<br><img id=Codehighlighter1_58_65_Open_Image onclick="this.style.display='none'; Codehighlighter1_58_65_Open_Text.style.display='none'; Codehighlighter1_58_65_Closed_Image.style.display='inline'; Codehighlighter1_58_65_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_58_65_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_65_Closed_Text.style.display='none'; Codehighlighter1_58_65_Open_Image.style.display='inline'; Codehighlighter1_58_65_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_58_65_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_58_65_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">TODO</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">eTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;click();&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>dTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)(eTime</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">sTime)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">CLOCKS_PER_SEC;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
2. RDTSC :(Read Time Stamp Counter)&nbsp;<sub>[1]</sub><br>在Intel&nbsp;&nbsp; Pentium以上级别的CPU中，有一个称为&#8220;时间戳（Time&nbsp;&nbsp; Stamp）&#8221;的部件，它以64位无符号整型数的格式，记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高(1GHz = 10<sup>9)</sup>，因此这个部件可以达到纳秒级(<font size=2>一秒的10亿分之一，即等于10的负9次方秒</font>)的计时精度。这个精确性是上述方法所无法比拟的。在Pentium以上的CPU中，提供了一条机器指令RDTSC（Read&nbsp;&nbsp; Time&nbsp;&nbsp; Stamp&nbsp;&nbsp; Counter）来读取这个时间戳的数字，并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器，所以我们可以把这条指令，嵌入汇编代码的方式，看成是一个普通的函数调用。像这样：&nbsp;&nbsp;&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;inline&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;__int64&nbsp;&nbsp;&nbsp;GetCycleCount()&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_53_81_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_81_Open_Text.style.display='none'; Codehighlighter1_53_81_Closed_Image.style.display='inline'; Codehighlighter1_53_81_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_53_81_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_81_Closed_Text.style.display='none'; Codehighlighter1_53_81_Open_Image.style.display='inline'; Codehighlighter1_53_81_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_53_81_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_53_81_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;&nbsp;&nbsp;RDTSC&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span></div>
但是不行，因为RDTSC不被C++的内嵌汇编器直接支持，所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31，如下：&nbsp;&nbsp;&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;inline&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;__int64&nbsp;&nbsp;&nbsp;GetCycleCount()&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_53_116_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_116_Open_Text.style.display='none'; Codehighlighter1_53_116_Closed_Image.style.display='inline'; Codehighlighter1_53_116_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_53_116_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_116_Closed_Text.style.display='none'; Codehighlighter1_53_116_Open_Image.style.display='inline'; Codehighlighter1_53_116_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_53_116_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_53_116_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;&nbsp;&nbsp;_emit&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0x0F</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;&nbsp;&nbsp;_emit&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0x31</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span></div>
&nbsp;&nbsp;&nbsp;以后在需要计数器的场合，可以调用两次GetCycleCount函数，比较两个返回值的差，像这样：&nbsp;&nbsp;&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>inline&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;__int64&nbsp;&nbsp;&nbsp;GetCycleCount()&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_129_184_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_184_Open_Text.style.display='none'; Codehighlighter1_129_184_Closed_Image.style.display='inline'; Codehighlighter1_129_184_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_129_184_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_129_184_Closed_Text.style.display='none'; Codehighlighter1_129_184_Open_Image.style.display='inline'; Codehighlighter1_129_184_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_129_184_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_129_184_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;&nbsp;&nbsp;_emit&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0x0F</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;__asm&nbsp;&nbsp;&nbsp;_emit&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0x31</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_199_396_Open_Image onclick="this.style.display='none'; Codehighlighter1_199_396_Open_Text.style.display='none'; Codehighlighter1_199_396_Closed_Image.style.display='inline'; Codehighlighter1_199_396_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_199_396_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_199_396_Closed_Text.style.display='none'; Codehighlighter1_199_396_Open_Image.style.display='inline'; Codehighlighter1_199_396_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_199_396_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_199_396_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;t;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;(unsigned&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)GetCycleCount();&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;(unsigned&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)GetCycleCount()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;t;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">时间：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
我的CPU是2.0GHz<br>所以输出结果：<br>时间：1995027270<br>程序所花时间秒数&nbsp;&nbsp; =&nbsp;&nbsp; RDTSC读出的周期数T1-RDTSC读出周期数T2&nbsp;&nbsp; /&nbsp;&nbsp; CPU主频速率（Hz）<br>缺点：<br>&nbsp;&nbsp;&nbsp; 1.数据抖动比较厉害，每次测得结果都不一样，波动幅度上百甚至上千<br>&nbsp;&nbsp;&nbsp; 2.在多核下不准确或不可用，有以下几个方面的原因<sub>[2]</sub>：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.两个CPU核的内部计数器不同步。如果程序两次读取这个计数器的时候恰好被轮换到不同的核上，那么用来计时就会有比较大的误差。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.CPU 的时钟频率可能变化，例如笔记本电脑的节能功能；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.乱序执行导致 RDTSC 测得的周期数不准，这个问题从 Pentium Pro 时代就存在。<br>解决方法<sub>[3]</sub>：可以采用设定线程亲核性的方法。函数SetThreadAffinityMask可以指定某线程只在某些核上运行（由第二个参数设定，每个位代表一个核）。例如，在需要调用RDTSC的那个线程里执行SetThreadAffinityMask(GetCurrentThread(), 0x00000001);就能保证该线程只在第一个核上运行，不会因为两个核的RDTSC计数器不同步而造成计时误差。我在windows7和VS2005下测试，测出的数据和我CPU主频不符，我一度怀疑刚买的笔记本是不是被刷屏了，后来还找了其他的一些测CPU的工具，比如CPU-Z，这个问题还没解决。<br>3.使用QueryPerformanceCounter查询函数方法<br>这个方法在多核下照常有效，QueryPerformanceFrequency()参数只和主板上的高精度定时器的晶振频率相关<br>在面的例子是两种求平方根的算法的性能比较，一种采用库函数的sqrt(),另一种方法是《编程珠玑》上介绍的牛顿迭代法求平方根，原理类似于二分查找，但是牛顿迭代法收敛速度相比快很多。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_70_823_Open_Image onclick="this.style.display='none'; Codehighlighter1_70_823_Open_Text.style.display='none'; Codehighlighter1_70_823_Closed_Image.style.display='inline'; Codehighlighter1_70_823_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_70_823_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_823_Closed_Text.style.display='none'; Codehighlighter1_70_823_Open_Image.style.display='inline'; Codehighlighter1_70_823_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_70_823_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_70_823_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">a待输入的开平方根数<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">x&nbsp;选取的x0点<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">y&nbsp;每次迭代的中间值</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;a,&nbsp;x,y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;start,endt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER&nbsp;t1,t2,tc;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceFrequency(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">tc);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Frequency:%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,tc.QuadPart);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">负数没有平方根！</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_366_446_Open_Image onclick="this.style.display='none'; Codehighlighter1_366_446_Open_Text.style.display='none'; Codehighlighter1_366_446_Closed_Image.style.display='inline'; Codehighlighter1_366_446_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_366_446_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_366_446_Closed_Text.style.display='none'; Codehighlighter1_366_446_Open_Image.style.display='inline'; Codehighlighter1_366_446_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_366_446_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_366_446_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">y)<br><img id=Codehighlighter1_411_443_Open_Image onclick="this.style.display='none'; Codehighlighter1_411_443_Open_Text.style.display='none'; Codehighlighter1_411_443_Closed_Image.style.display='inline'; Codehighlighter1_411_443_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_411_443_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_411_443_Closed_Text.style.display='none'; Codehighlighter1_411_443_Open_Image.style.display='inline'; Codehighlighter1_411_443_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_411_443_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_411_443_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t2);<br><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //牛顿迭代法求平方根所需时间</span><span style="COLOR: #008000">;</span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Lasting&nbsp;Time:%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,(t2.QuadPart</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t1.QuadPart));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">duration&nbsp;=&nbsp;(double)(finish&nbsp;-&nbsp;start)/CLOCKS_PER_SEC&nbsp;;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">的平方根为：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqrt(a);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#008000>//math.h库函数sqrt求平方根所需时间<span style="COLOR: #008000">;</span></font><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Lasting&nbsp;Time:%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,(t2.QuadPart</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t1.QuadPart));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">的平方根为：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">sqrt(a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;</span></div>
<br>两种求平方根所需时间对比如下：<br><img src="http://www.cppblog.com/images/cppblog_com/svmsung/result.JPG" border=0><br>在图形学中求平方根使用频率非常高，尤其是在碰触检测中，尽量提高求平方根的效率是非常有必要的。<br>总结：效率就是生命，在平时的项目开发中尽量做到简单，简单代表高效。这是检测高效的第一步。<br>引用：<br>[1]:http://zhidao.baidu.com/question/41853032.html<br>[2]:http://blog.csdn.net/Solstice/archive/2010/01/16/5196544.aspx<br>[3]:http://blog.21ic.com/user1/5184/archives/2009/65439.html</span>
<img src ="http://www.cppblog.com/svmsung/aggbug/120275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2010-07-13 23:03 <a href="http://www.cppblog.com/svmsung/archive/2010/07/13/120275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>temp 对象</title><link>http://www.cppblog.com/svmsung/archive/2009/12/24/103880.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Thu, 24 Dec 2009 01:56:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2009/12/24/103880.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/103880.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2009/12/24/103880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/103880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/103880.html</trackback:ping><description><![CDATA[《more effective c++》条款19：<br>c++真正的所谓临时对象是不可见的----不会在你的源代码出现。<br><br>无名临时对象通常发生在两种情况：<br>1. 当隐式类型转换(implicit type conversions)发生时；<br>2. 当函数返回对象时。<br><br>了解这些临时对象如何被产生和被销毁，很重要，因为这些对象伴随的构造成本和析构成本可能对你的程序性能产生值得注意的冲击。
<img src ="http://www.cppblog.com/svmsung/aggbug/103880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2009-12-24 09:56 <a href="http://www.cppblog.com/svmsung/archive/2009/12/24/103880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QT显示TGA图片</title><link>http://www.cppblog.com/svmsung/archive/2009/09/16/96445.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Wed, 16 Sep 2009 10:06:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2009/09/16/96445.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/96445.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2009/09/16/96445.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/96445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/96445.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 之前遇到QT不支持TGA图片显示的缺陷，人家写的一种弥补的办法，借用一下，手动写一个函数，加载TGA图片，希望对遇到同样问题的朋友有用。如果你有更好的方法也不妨告诉我，非常感谢！&nbsp;&nbsp;1#define&nbsp;QT3_SUPPORT&nbsp;&nbsp;&nbsp;2#include&nbsp;&lt;QtGui/QApplication.h&gt;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/svmsung/archive/2009/09/16/96445.html'>阅读全文</a><img src ="http://www.cppblog.com/svmsung/aggbug/96445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2009-09-16 18:06 <a href="http://www.cppblog.com/svmsung/archive/2009/09/16/96445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Material Editor</title><link>http://www.cppblog.com/svmsung/archive/2009/09/15/96218.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Tue, 15 Sep 2009 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2009/09/15/96218.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/96218.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2009/09/15/96218.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/96218.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/96218.html</trackback:ping><description><![CDATA[我们现在想做的是类似Unreal 3中材质编辑器<br>设计思想就是，美工可以很容易的实现想要实现的材质，而不需要动手编码，只需要拉你需要的表示进行组织，通过带箭头的线连接起来，what you see is what you play：基本框架已经出来，能实现少量几种材质效果，比如：法线，视差，Relief<br><br>我希望结识一些研究实时渲染的朋友，一起交流GPU编程！！！<br><br>贴几张效果图：<br><br><span style="COLOR: red">1.没有添加任何特效的贴图：</span><br><img height=728 src="http://www.cppblog.com/images/cppblog_com/svmsung/normal.JPG" width=1033 border=0><br><br><span style="COLOR: red">2.加上法线贴图的贴图：</span><br><img height=728 src="http://www.cppblog.com/images/cppblog_com/svmsung/relief.JPG" width=1033 border=0><br><br><span style="COLOR: red">3.加一张黑白图做偏移参照，</span><span style="COLOR: red">视差偏移贴图</span>：<br><img height=728 alt="" src="http://www.cppblog.com/images/cppblog_com/svmsung/relief_parallax.JPG" width=1033 border=0> 
<img src ="http://www.cppblog.com/svmsung/aggbug/96218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2009-09-15 15:21 <a href="http://www.cppblog.com/svmsung/archive/2009/09/15/96218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CString,string,char*, int之间的转换</title><link>http://www.cppblog.com/svmsung/archive/2009/08/26/94445.html</link><dc:creator>李熙建</dc:creator><author>李熙建</author><pubDate>Wed, 26 Aug 2009 04:19:00 GMT</pubDate><guid>http://www.cppblog.com/svmsung/archive/2009/08/26/94445.html</guid><wfw:comment>http://www.cppblog.com/svmsung/comments/94445.html</wfw:comment><comments>http://www.cppblog.com/svmsung/archive/2009/08/26/94445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/svmsung/comments/commentRss/94445.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/svmsung/services/trackbacks/94445.html</trackback:ping><description><![CDATA[<h5>1 string转CString</h5>
<pre>CString.format("%s",string.c_str());</pre>
<h5>2&nbsp;CString 转 string</h5>
<pre>UNICODE编码：<br>CString inStr;<br>setlocale(LC_ALL,"chs");<br>char* p = new char[...];//足够长<br>wcstombs( p , str , str.GetLength() );<br>string outStr = p; <br>ASCII编码：<br>CString inStr;<br>string outStr = (const char*)str;</pre>
<h5>3&nbsp;Char* 转CString</h5>
<pre>CSstring.format("%s",char*);</pre>
<h5>4 CString互转char*&nbsp;&nbsp;&nbsp;</h5>
<pre>CString strtest;&nbsp; <br>char * charpoint;&nbsp; <br>charpoint=strtest.GetBuffer(strtest.GetLength());&nbsp; </pre>
<h5>5&nbsp;char *转 string&nbsp;</h5>
<pre>string s(char*);</pre>
<h5>6 string 转 char *&nbsp; </h5>
<pre>char *p = string.c_str();&nbsp; </pre>
<pre>《C++标准函数库》中说的&nbsp; <br>有三个函数可以将字符串的内容转换为字符数组和C—string&nbsp; <br>1.data(),返回没有&#8221;\0&#8220;的字符串数组&nbsp; <br>2,c_str()，返回有&#8221;\0&#8220;的字符串数组&nbsp; <br>3，copy()&nbsp; </pre>
<h5><br>7 CString转int&nbsp; </h5>
<pre>CString ss="1212.12";&nbsp; <br>int temp=atoi(ss);&nbsp;</pre>
<pre>//CString aaa = "16" ; <br>//int int_chage = atoi((lpcstr)aaa) ;&nbsp;</pre>
<h5>8 int转CString </h5>
<pre>CString aa;&nbsp; <br>aa.Format("%d",temp);&nbsp;<br>Format函数的功能很强，好好研究一下。<br></pre>
<h5>9 int 转 string</h5>
<pre>int a = 2;<br>char p[NUM];//NUM够用<br>string desStr = itoa(a,p,10)//第三个参数很有意思，这里的10代表的是10进制，如果你的例子中 a =10 ,itoa(a,p,16)的话，desStr = "a";<br></pre>
<h5>10 string 转 int</h5>
<p>string srcStr= "222";<br>int a = atoi(srcStr);</p>
<h5><br><br>&nbsp;</h5>
<img src ="http://www.cppblog.com/svmsung/aggbug/94445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/svmsung/" target="_blank">李熙建</a> 2009-08-26 12:19 <a href="http://www.cppblog.com/svmsung/archive/2009/08/26/94445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>