2010年3月12日 #
怎么样判断两个浮点数精确相等?一般来说是两个数差的绝对值和一个极小值比较,如果小于这个极小就,就认为是相等。
前两天在LinuxSir上看到一个贴子,讨论这个问题,发现可以精确比较相等。
代码如下:
发现用这种方法在Ubuntu8.04,GCC4.24的情况下通过。不过这种方法个人感觉只能用来比较一个程序内部生成的浮点数的运算。
如果两个浮点数是由两台不同平台的机器运行的程序生成,或者不同编译器生成的程序运行产生,则可能根据无法得到相等的结果。
因现在只有x86的机器,谁手上有ARM平台之类的,请帮忙测试一下。谢谢
当直接用==比较两个浮点数时,随着整数部分增加,精度急剧下降
当比较0.000...001和0.000.。0011时,到65个零都没有问题,能得到正确结果 当比较1.000..001和0.000.00011时,小数点后14个零时,就不能得到正确结果。
2008年11月24日 #
2007年8月24日 #
环境:mingw5.1.3 + msys1.0.10+ msysDTK-1.0.1
这些软件都可以从mingw的官方网站上下载。
从mingw官方网站上下载gdb-6.6-mingw-src.tar.bz2和mingw-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
才能编译成功
Powered by: C++博客 Copyright © 绝对零度