﻿<?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/netdigger/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:37:41 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:37:41 GMT</pubDate><ttl>60</ttl><item><title>如何精确判断两个浮点数相等</title><link>http://www.cppblog.com/netdigger/archive/2010/03/12/109520.html</link><dc:creator>绝对零度</dc:creator><author>绝对零度</author><pubDate>Fri, 12 Mar 2010 05:00:00 GMT</pubDate><guid>http://www.cppblog.com/netdigger/archive/2010/03/12/109520.html</guid><wfw:comment>http://www.cppblog.com/netdigger/comments/109520.html</wfw:comment><comments>http://www.cppblog.com/netdigger/archive/2010/03/12/109520.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/netdigger/comments/commentRss/109520.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/netdigger/services/trackbacks/109520.html</trackback:ping><description><![CDATA[<p>怎么样判断两个浮点数精确相等？一般来说是两个数差的绝对值和一个极小值比较，如果小于这个极小就，就认为是相等。<br></p>
<p>前两天在LinuxSir上看到一个贴子，讨论这个问题，发现可以精确比较相等。<br></p>
<p>代码如下：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; 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;">stdio.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">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.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"><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_51_424_Open_Image" onclick="this.style.display='none'; codehighlighter1_51_424_open_text.style.display="'none';" codehighlighter1_51_424_closed_image.style.display="'inline';" codehighlighter1_51_424_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_51_424_Closed_Image" style="display: none;" onclick="this.style.display='none'; codehighlighter1_51_424_closed_text.style.display="'none';" codehighlighter1_51_424_open_image.style.display="'inline';" codehighlighter1_51_424_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_51_424_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_51_424_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;">double</span><span style="color: #000000;">&nbsp;a,&nbsp;b;<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;">please&nbsp;enter&nbsp;a&nbsp;number:</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;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a);<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;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">please&nbsp;enter&nbsp;b&nbsp;number:</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;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b);<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;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Input&nbsp;number&nbsp;is&nbsp;a=%f,&nbsp;b=%f\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;a,&nbsp;b);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #000000;"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"><br><img id="Codehighlighter1_351_377_Open_Image" onclick="this.style.display='none'; codehighlighter1_351_377_open_text.style.display="'none';" codehighlighter1_351_377_closed_image.style.display="'inline';" codehighlighter1_351_377_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_351_377_Closed_Image" style="display: none;" onclick="this.style.display='none'; codehighlighter1_351_377_closed_text.style.display="'none';" codehighlighter1_351_377_open_image.style.display="'inline';" codehighlighter1_351_377_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a&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;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b)&nbsp;</span><span id="Codehighlighter1_351_377_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"></span><span id="Codehighlighter1_351_377_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;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">a&nbsp;==&nbsp;b\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><img id="Codehighlighter1_384_410_Open_Image" onclick="this.style.display='none'; codehighlighter1_384_410_open_text.style.display="'none';" codehighlighter1_384_410_closed_image.style.display="'inline';" codehighlighter1_384_410_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_384_410_Closed_Image" style="display: none;" onclick="this.style.display='none'; codehighlighter1_384_410_closed_text.style.display="'none';" codehighlighter1_384_410_open_image.style.display="'inline';" codehighlighter1_384_410_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span id="Codehighlighter1_384_410_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"></span><span id="Codehighlighter1_384_410_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;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">a&nbsp;!=&nbsp;b\n</span><span style="color: #000000;">"</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"><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>
<p><br>&nbsp;发现用这种方法在Ubuntu8.04，GCC4.24的情况下通过。不过这种方法个人感觉只能用来比较一个程序内部生成的浮点数的运算。</p>
<p>如果两个浮点数是由两台不同平台的机器运行的程序生成，或者不同编译器生成的程序运行产生，则可能根据无法得到相等的结果。</p>
<p>因现在只有x86的机器，谁手上有ARM平台之类的，请帮忙测试一下。谢谢<br></p>
<p><br></p>
<p>当直接用==比较两个浮点数时，随着整数部分增加，精度急剧下降</p>
<p>当比较0.000...001和0.000.。0011时，到65个零都没有问题，能得到正确结果<br>
当比较1.000..001和0.000.00011时，小数点后14个零时，就不能得到正确结果。</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/netdigger/aggbug/109520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/netdigger/" target="_blank">绝对零度</a> 2010-03-12 13:00 <a href="http://www.cppblog.com/netdigger/archive/2010/03/12/109520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu下eclipse3.4异常退出的解决</title><link>http://www.cppblog.com/netdigger/archive/2008/11/24/67733.html</link><dc:creator>绝对零度</dc:creator><author>绝对零度</author><pubDate>Mon, 24 Nov 2008 06:51:00 GMT</pubDate><guid>http://www.cppblog.com/netdigger/archive/2008/11/24/67733.html</guid><wfw:comment>http://www.cppblog.com/netdigger/comments/67733.html</wfw:comment><comments>http://www.cppblog.com/netdigger/archive/2008/11/24/67733.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/netdigger/comments/commentRss/67733.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/netdigger/services/trackbacks/67733.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 近日由于工作需要，在ubuntu8.04下使用eclipse3.4。由于我已经在系统上通过apt-get安装了eclipse3.2，所以我直接下载了eclipse3.4并安装后。eclipse3.4也能使用。但在使用过程中，发现eclipse频频死机，重启。经过多方查找资料，发现问题出在Java虚拟机上，在用apt-get安装eclipse3.2.2时，ubuntu默认安装的java虚拟机并非sun的java虚拟机。在安装JDK6.0后。问题得以解决。下面是安装过程。<br><br>注：安装过程参考了http://blog.donews.com/maverick/archive/2007/05/22/1167648.aspx<br><br>首先需要安装JDK 6<br>sudo apt-get install sun-java6-jdk<br>设置默认的java程序<br>sudo update-alternatives --config java<br>按照提示输入对应的选项，指定为JDK 6<br><br>设置环境变量：sudo vim /etc/environment<br>在其中添加如下两行：<br>CLASSPATH=/usr/lib/jvm/java-6-sun/lib<br>JAVA_HOME=/usr/lib/jvm/java-6-sun<br>如果其中已经设置了CLASSPATH和JAVA_HOME，则将其修改为上面的形式。<br><br>将SUN-JDK-6彻底设为系统默认：sudo update-java-alternatives -s java-6-sun<br><br>然后编辑JVM配置文件：sudo vim /etc/jvm<br><br>在文件顶部添加<br>/usr/lib/jvm/java-6-sun<br>（如果没有则自己新建）<br><br><br>经测试，安装JDK后，eclipse3.4运行一切正常 <img src ="http://www.cppblog.com/netdigger/aggbug/67733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/netdigger/" target="_blank">绝对零度</a> 2008-11-24 14:51 <a href="http://www.cppblog.com/netdigger/archive/2008/11/24/67733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下用msys+minGW编译GDB和GDBServer</title><link>http://www.cppblog.com/netdigger/archive/2007/08/24/30773.html</link><dc:creator>绝对零度</dc:creator><author>绝对零度</author><pubDate>Fri, 24 Aug 2007 09:32:00 GMT</pubDate><guid>http://www.cppblog.com/netdigger/archive/2007/08/24/30773.html</guid><wfw:comment>http://www.cppblog.com/netdigger/comments/30773.html</wfw:comment><comments>http://www.cppblog.com/netdigger/archive/2007/08/24/30773.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/netdigger/comments/commentRss/30773.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/netdigger/services/trackbacks/30773.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;">
<p class="MsoNormal"><span style="font-family: 宋体;">环境：</span><span lang="EN-US">mingw5.1.3
+ msys1.0.10+ msysDTK-1.0.1</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">这些软件都可以从</span><span lang="EN-US">mingw</span><span style="font-family: 宋体;">的官方网站上下载。</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">从</span><span lang="EN-US">mingw</span><span style="font-family: 宋体;">官方网站上下载</span><span lang="EN-US">gdb-6.6-mingw-src.tar.bz2</span><span style="font-family: 宋体;">和</span><span lang="EN-US">mingw-gdb.6.6.patch.tar.bz2</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">进入</span><span lang="EN-US">msys.</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">解压缩两个包</span></p>
<p class="MsoNormal"><span lang="EN-US">Cd gdb-6.6-mngw</span></p>
<p class="MsoNormal"><span lang="EN-US">patch &#8211;Np1 &#8211;I ../mingw-gdb-path.</span></p>
<p class="MsoNormal"><span lang="EN-US">./configure &#8211;target=arm-linux &#8211;prefix=/usr/local/arm-gdb</span></p>
<p class="MsoNormal"><span lang="EN-US">make</span></p>
<p class="MsoNormal"><span lang="EN-US">make install</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;官方网站上提供的gdb-5.2.1-1的源代码包，我没有编译成功，不知道有人编译成功了吗?</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Gdbserver</span><span style="font-family: 宋体;">编译：</span></p>
<p class="MsoNormal"><span lang="EN-US">cd gdb/gdbserver</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">网上一般教程都是：</span></p>
<p class="MsoNormal"><span lang="EN-US">./configure &#8211;target=arm-linux &#8211;host=arm-linux</span></p>
<p class="MsoNormal"><span lang="EN-US">Make CC=arm-linux-gcc(</span><span style="font-family: 宋体;">交叉编译工具</span><span lang="EN-US">)</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">但在</span><span lang="EN-US">某些交叉编译工具可能会</span><span style="font-family: 宋体;">不行。如我用的就是,花了大半天时间才找到方法。方法如下：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">假设交叉编译工具名字叫arm-linux-gnueabi-gcc.</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">先执行：arm-linux-gnueabi-gcc -v</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">找到一行，指出target的。假设是arm-linux-gnueabi.</span></p>
接着：
<p class="MsoNormal"><span lang="EN-US">./configure &#8211;target=arm-linux-gnueabi &#8211;host=arm-linux-gnueabi
CC=arm-linux-gnueabi-gcc</span></p>
<p class="MsoNormal"><span lang="EN-US">make</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">才能编译成功</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<span style="font-size: 10.5pt; font-family: 宋体;">所以最好在</span><span style="font-size: 10.5pt; font-family: &quot;times new roman&quot;;" lang="EN-US">configure</span><span style="font-size: 10.5pt; font-family: 宋体;">时就指定交叉编译工具。<br><br><br><br></span> </span><img src ="http://www.cppblog.com/netdigger/aggbug/30773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/netdigger/" target="_blank">绝对零度</a> 2007-08-24 17:32 <a href="http://www.cppblog.com/netdigger/archive/2007/08/24/30773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>