Wie um zu überprüfen, ob C++ - compiler verwendet IEEE 754 floating point standard
Ich würde gerne eine Frage zu stellen, folgt diese eine das ist ziemlich gut beantwortet, durch das definieren, prüfen Sie, ob der compiler benutzt den standard. Doch diese woks für C nur. Gibt es eine Möglichkeit, das gleiche zu tun in C++?
Ich möchte nicht verdeckte floating-point-Typen-text, oder verwenden Sie einige ziemlich komplexe Konvertierungsfunktionen. Muss ich nur die compiler-check. Wenn Sie wissen, eine Liste der kompatiblen Compilern bitte den link posten. Ich konnte Sie nicht finden.
- zur Laufzeit können Sie
std::numeric_limits<double>::is_iec559()
um zu überprüfen, ob eine bestimmte Gleitkomma-Typ ist, dargestellt nach IEEE 754. Natürlich sagt das wenig darüber, ob der compiler die floating-point-handling 754 konform, aber es sollte Ihnen einen guten Hinweis. - Ich denke, es ist weniger eine Frage des Compilers unterstützen es und eher eine Frage der CPU-FPU-Unterstützung... aber ich bin nicht 100% überzeugt von diesem, so mache ich ein Kommentar und keine Antwort.
- Bei der Laufzeit? Sind Sie sicher? en.cppreference.com/w/cpp/types/numeric_limits/is_iec559
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habt Ihr wirklich ein einfacher Weg, dies zu erreichen in C++. Aus dem C++ - standard
18.2.1.1
die Klassenumeric_limits
existiert innerhalbstd
. Um Zugang zu diesen statischen member, die Sie einfach so machen:Oder:
Sollte zurück
true
wenn IEEE 754 verwendet wird, andernfalls false.Als eine alternative Methode, der zweite Teil von Adams Antwort tun sollte es auch für C++.
is_iec559
false sein sollte. Oder, abhängig von einigen compiler-Schalter, sollte die software emuliert undtrue
- oder IEEE-754-inkompatibel undfalse
. Es scheint nicht, wie ein konzeptionelles problem für mich, aber vielleicht bin ich etwas fehlt.is_iec559
istfalse
weil der Typ ist nur zu 99,99% kompatibel mit dem IEEE-754. Ich kann mich nicht erinnern, warum ich dachte, zu der Zeit, aber basierend auf meine Kommentare oben ich dachte, dass das, was der Fragesteller wirklich brauchen, um zu wissen, ob die IEEE-format verwendet wurde, nicht, ob die IEEE-Semantik wurden genau befolgt werden. Daher gibt es falsche negative, aber da das, was der Fragende eigentlich wissen wollte, ist nicht formal definiert, es gibt keine Möglichkeit, aus, dass.is_iec559
false für einige fast-aber-nicht-ganz IEEE 754 konforme Ziel. In diesen Tagen populäre Architekturen wohl nicht bekommen, es auf die richtige Art als eine Forderung der übrigen beliebt 😉Obwohl dieser Beitrag ist ein bisschen alt (10 Jahre), könnte man immer noch versuchen, diese. Es funktioniert auch in C: