使用std::exp
來計算e^-infinity
返回-infinity
當使用浮點表示無窮大並使用Visual C++ 2013構建x64二進制文件時,我期望它返回0,這是Win32版本發生的情況,或std::exp
的版本,其版本爲double
。std :: exp浮點負無窮在Visual C++ 2013中爲x64構建返回負無窮大
構建爲x64的以下代碼演示了此問題。
#include <limits>
#include <iostream>
int main(const int argc, const char** argv) {
std::cout << "exp of float -infinity: " << std::exp(-std::numeric_limits<float>::infinity()) << std::endl;
std::cout << "exp of double -infinity: " << std::exp(-std::numeric_limits<double>::infinity()) << std::endl;
}
用於編譯的命令行選項(從Visual Studio所):
/GS /Wall /Gy /Zc:wchar_t /Zi /Gm- /Od /sdl /Fd"x64\Release\vc120.pdb" /fp:precise /D "_MBCS" /errorReport:prompt /WX /Zc:forScope /Gd /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\NumericLimitsTest.pch"
的上面的輸出:
exp of float -infinity: -1.#INF
exp of double -infinity: 0
爲什麼會出現這種情況?
這是一個錯誤;它在Visual C++ 2015運行時庫中得到修復。 –
@JamesMcNellis - 這不是最終的答案嗎? –