use*_*446 5 c++ visual-studio-2008 visual-studio visual-c++
试图将Java代码移植到C++我偶然发现了一些奇怪的行为.我无法获得双重工作(即使编译器选项/ fp:strict,这意味着在Visual Studio 2008中设置了"正确的"浮点数学).
double a = 0.4;
/* a: 0.40000000000000002, correct */
double b = 0.0 + 0.4;
/* b: 0.40000000596046448, incorrect
(0 + 0.4 is the same). It's not even close to correct. */
double c = 0;
float f = 0.4f;
c += f;
/* c: 0.40000000596046448 too */
Run Code Online (Sandbox Code Playgroud)
在一个不同的测试项目中,我设置它工作正常(/ fp:strict表现符合IEEE754).
使用Visual Studio 2008(标准),无优化,FP:严格.
有任何想法吗?它是真的截断浮动?这个项目在java和C++方面确实需要相同的行为.我通过VC++中的调试窗口读取了所有值.
解决方案: _fpreset(); //巴里凯利的想法解决了它.库正在将FP精度设置为低.
归档时间: |
|
查看次数: |
810 次 |
最近记录: |