std::exp
Возвращает -infinity
при использовании представления float бесконечности и построения двоичного кода x64 с использованием Visual C++ 2013. Я бы ожидал, return 0, что происходит с сборками Win32 или с версией std::exp
, которая занимает double
.std :: exp of float отрицательная бесконечность возвращает отрицательную бесконечность для x64 сборок в Visual C++ 2013
Этот код, построенный как 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 - разве это не окончательный ответ? –