我有从标准::绝对不正确的结果与MSVC和GCC为什么标准:: ABS输出不正确上MSVC2015
#include <cmath>
#include <iostream>
#include <complex>
int main()
{
std::cerr << std::sqrt((-6.)*(-6.) + 288.*288.) << "\n";
std::cerr << std::abs(std::complex<float>(-6, 288)) << std::endl;
return 0L;
}
以上代码生成VC上不同的结果++(MSVS 2015 CE与更新)和GCC 4.9.2
随着MSVC
288.062
288.063
随着GCC
288.062
288.062
现在实际结果是288.062,这在gcc上用std :: abs和std :: sqrt是正确的。但是当使用std :: sqrt和std :: abs可能是msvc2015中的一个bug时,msvc会有不同的结果。
但看着xcomplex的代码,我不明白_Fabs()的实现。有人能帮我理解这个特定的代码,并且可以分析代码如何以这样的错误结束。
请注意,在第一行中,您正在使用双打。 –
您是否真的认为所有这些浮点操作都会为两个不同的编译器产生完全相同的结果,因为浮点数是近似值?如果您使用相同的编译器得到不同的结果,但改变了一些编译器选项(如优化或其他设置),我不会感到惊讶。 – PaulMcKenzie