我有從標準::絕對不正確的結果與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