请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
背景:
许多年前,我继承了一个使用Visual Studio(VC++)标志'/ fp:fast'的代码库,以在特定的计算重量库中生成更快的代码.不幸的是,'/ fp:fast'产生的结果与不同编译器(Borland C++)下的同一个库略有不同.当我们需要产生完全相同的结果时,我切换到'/ fp:precise',这很好,从那以后一切都很好.但是,现在我在uBuntu Linux 10.04上用g ++编译同一个库,我看到了类似的行为,我想知道它是否有类似的根本原因.我的g ++构建的数值结果与我的VC++构建的数值结果略有不同.这让我想到了我的问题:
题:
g ++与VC++中的'fp:fast'和'fp:precise'选项有相同或相似的参数吗?(它们是什么?我想激活'fp:precise'等价物.)
更详细的信息:
我使用'make'编译,它调用g ++.据我所知(make文件有点神秘,而且不是我写的)g +调用中添加的唯一参数是"普通"(包括文件夹和要编译的文件)和-fPIC(我不确定这个开关是做什么的,我没有在'man'页面上看到它.
'man g ++'中唯一相关的参数似乎是用于打开优化选项.(例如-funsafe-math-optimizations).但是,我认为我没有打开任何东西,我只是想关闭相关的优化.
我已经尝试过发布和调试版本,VC++为发布和调试提供了相同的结果,g ++给出了与发布和调试相同的结果,但是我不能让g ++版本给出与VC++版本相同的结果.
c++ g++ compiler-optimization visual-studio-2008 ubuntu-10.04