【发布时间】:2015-09-23 05:56:57
【问题描述】:
当使用无穷大的浮点表示并使用 Visual C++ 2013 构建 x64 二进制文件时,使用 std::exp 计算 e^-infinity 将返回 -infinity。我希望它返回 0,这与 Win32 版本相同,或者采用double 的std::exp 版本。
以下构建为 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 - 这不是最终的答案吗?
标签: c++ visual-c++