零度天空

C++博客 首页 新随笔 联系 聚合 管理
  3 Posts :: 0 Stories :: 6 Comments :: 0 Trackbacks

2010年3月12日 #

怎么样判断两个浮点数精确相等?一般来说是两个数差的绝对值和一个极小值比较,如果小于这个极小就,就认为是相等。

前两天在LinuxSir上看到一个贴子,讨论这个问题,发现可以精确比较相等。

代码如下:

#include <stdio.h>
#include 
<stdlib.h>

int main()
{
    
double a, b;
    printf(
"please enter a number:");
    scanf(
"%lf"&a);

    printf(
"please enter b number:");
    scanf(
"%lf"&b);

    printf(
"Input number is a=%f, b=%f\n", a, b);

  
if (*(long long int *)&== *(long long int *)&b) {
        printf(
"a == b\n");
   }
 else {
        printf(
"a != b\n");
    }


    
return 0;
}


 发现用这种方法在Ubuntu8.04,GCC4.24的情况下通过。不过这种方法个人感觉只能用来比较一个程序内部生成的浮点数的运算。

如果两个浮点数是由两台不同平台的机器运行的程序生成,或者不同编译器生成的程序运行产生,则可能根据无法得到相等的结果。

因现在只有x86的机器,谁手上有ARM平台之类的,请帮忙测试一下。谢谢


当直接用==比较两个浮点数时,随着整数部分增加,精度急剧下降

当比较0.000...001和0.000.。0011时,到65个零都没有问题,能得到正确结果
当比较1.000..001和0.000.00011时,小数点后14个零时,就不能得到正确结果。

 

posted @ 2010-03-12 13:00 绝对零度 阅读(4003) | 评论 (3)编辑 收藏

2008年11月24日 #

    近日由于工作需要,在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后。问题得以解决。下面是安装过程。

注:安装过程参考了http://blog.donews.com/maverick/archive/2007/05/22/1167648.aspx

首先需要安装JDK 6
sudo apt-get install sun-java6-jdk
设置默认的java程序
sudo update-alternatives --config java
按照提示输入对应的选项,指定为JDK 6

设置环境变量:sudo vim /etc/environment
在其中添加如下两行:
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun
如果其中已经设置了CLASSPATH和JAVA_HOME,则将其修改为上面的形式。

将SUN-JDK-6彻底设为系统默认:sudo update-java-alternatives -s java-6-sun

然后编辑JVM配置文件:sudo vim /etc/jvm

在文件顶部添加
/usr/lib/jvm/java-6-sun
(如果没有则自己新建)


经测试,安装JDK后,eclipse3.4运行一切正常
posted @ 2008-11-24 14:51 绝对零度 阅读(2198) | 评论 (1)编辑 收藏

2007年8月24日 #

环境:mingw5.1.3 + msys1.0.10+ msysDTK-1.0.1

这些软件都可以从mingw的官方网站上下载。

 

mingw官方网站上下载gdb-6.6-mingw-src.tar.bz2mingw-gdb.6.6.patch.tar.bz2

进入msys.

解压缩两个包

Cd gdb-6.6-mngw

patch –Np1 –I ../mingw-gdb-path.

./configure –target=arm-linux –prefix=/usr/local/arm-gdb

make

make install

 官方网站上提供的gdb-5.2.1-1的源代码包,我没有编译成功,不知道有人编译成功了吗?

Gdbserver编译:

cd gdb/gdbserver

 

网上一般教程都是:

./configure –target=arm-linux –host=arm-linux

Make CC=arm-linux-gcc(交叉编译工具)

 

但在某些交叉编译工具可能会不行。如我用的就是,花了大半天时间才找到方法。方法如下:

假设交叉编译工具名字叫arm-linux-gnueabi-gcc.

先执行:arm-linux-gnueabi-gcc -v

找到一行,指出target的。假设是arm-linux-gnueabi.

接着:

./configure –target=arm-linux-gnueabi –host=arm-linux-gnueabi CC=arm-linux-gnueabi-gcc

make

才能编译成功

 

所以最好在configure时就指定交叉编译工具。



posted @ 2007-08-24 17:32 绝对零度 阅读(7289) | 评论 (2)编辑 收藏

仅列出标题