相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

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)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

是否有(Linux)g ++等效于Visual Studio中使用的/ fp:precise和/ fp:fast标志?

背景:

许多年前,我继承了一个使用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

11
推荐指数
3
解决办法
5329
查看次数