std::exp
Mit e^-infinity
kehrt -infinity
bei der Verwendung der Schwimmer Darstellung der Unendlichkeit und den Aufbau eines x64 binary mit Visual C++ 2013 ich es erwarten würde, zu berechnen, return 0, was passiert mit Win32-Builds, oder die Version std::exp
, die eine double
dauert.std :: exp des Schwimmers negativ Unendlich kehrt negative Unendlichkeit für x64 in Visual C baut ++ 2013
Der folgende Code, der als x64 erstellt wird, veranschaulicht das Problem.
#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;
}
Befehlszeilenoptionen für Kompilierung (von Visual Studio genommen):
/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"
Ausgabe von oben:
exp of float -infinity: -1.#INF
exp of double -infinity: 0
Warum passiert das das?
Dies ist ein Fehler; Es ist in den Visual C++ 2015-Laufzeitbibliotheken behoben. –
@JamesMcNellis - ist das nicht die definitive Antwort? –