Wir haben spezielle Funktionen wie std::nanl
, um ein NaN mit einer Nutzlast zu machen. Zur Zeit ist hier, was muß ich es drucken tun zurück:Wie kann Nutzlast eines NaN gedruckt werden?
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdint>
int main()
{
const auto x=std::nanl("1311768467463790325");
std::uint64_t y;
std::memcpy(&y,&x,sizeof y);
std::cout << (y&~(3ull<<62)) << "\n";
}
Dies beruht auf der besonderen Darstellung long double
, nämlich auf der 80-Bit-Art von x87 FPU zu sein. Gibt es einen Standardweg, um dies zu erreichen, ohne auf solche Einzelheiten der Implementierung angewiesen zu sein?
Nein. Die Darstellung von Gleitkommatypen - einschließlich der Unterstützung von NaNs - ist implementierungsdefiniert. Nicht alle Fließkommadarstellungen können NaNs unterstützen. Aus Sicht der C++ - Implementierung gibt es daher keine Garantie, dass ein NaN überhaupt dargestellt werden kann und - wenn es sein kann - wie es dargestellt wird. – Peter