に間違っている:: MSVCとGCC理由はstd :: ABS出力は、私がSTDから不正な結果が生じています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 GCC
でMSVC288.062
288.063
で
288.062
288.062
実際の結果はgdでstd :: absとstd :: sqrtで正しい288.062です。しかし、msvcはstd :: sqrtとstd :: absを使用した場合、msvc2015のバグとなる可能性があります。
xcomplexのコードを見ると、私は_Fabs()の実装を理解していません。誰かが私にこの特定のコードとそのコードがどのようにこのようなバグで終わったかの可能な分析を理解する助けになるかもしれません。
最初の行では2倍を使用しています。 –
浮動小数点は近似値であるため、この浮動小数点操作のすべてが2つの異なるコンパイラに対してまったく同じ結果をもたらすと本当に思いましたか?私はあなたが同じコンパイラを使用することとは異なる結果を得たが、いくつかのコンパイラオプション(最適化やその他の設定など)を変更しても驚くことはありません。 – PaulMcKenzie