In dem stdint.h
(C99), boost/cstdint.hpp und cstdint
(C++ 0x) -Header gibt es unter anderem vom Typ int32_t
.
Gibt es ähnliche Gleitkommatypen mit fester Größe? Etwas wie float32_t
?
In den C- oder C++ - Standards existiert derzeit nichts dergleichen. Tatsächlich gibt es nicht einmal die Garantie, dass float
überhaupt ein binäres Gleitkommaformat ist.
Einige Compiler garantieren, dass der Typ float
das 32-Bit-Binärformat IEEE-754 hat. Manche nicht. In Wirklichkeit ist float
tatsächlich der Typ IEEE-754 single
auf den meisten nicht eingebetteten Plattformen, obwohl die üblichen Vorbehalte gegen einige Compiler bestehen, die Ausdrücke in einem breiteren Format auswerten anwenden.
Es gibt eine Arbeitsgruppe, die sich mit dem Hinzufügen von C-Sprachbindungen für die Revision von IEEE-754 aus dem Jahr 2008 befasst. Wenn dies zu C hinzugefügt würde, würde der C++ - Standard wahrscheinlich nachziehen ... irgendwann.
Wenn Sie wissen möchten, ob Ihr float
der IEEE-32-Bit-Typ ist, aktivieren Sie std::numeric_limits<float>::is_iec559
. Es ist eine Konstante zur Kompilierungszeit, keine Funktion.
Wenn Sie kugelsicherer sein möchten, überprüfen Sie auch std::numeric_limits<float>::digits
, Um sicherzustellen, dass die IEEE-Standard-Doppelgenauigkeit für float
nicht verwendet wird. Es sollte 24 sein.
Wenn es um long double
Geht, ist es wichtiger, digits
zu überprüfen, da es ein paar IEEE-Formate gibt, die vernünftigerweise sein könnten: 128 Bit (Ziffern = 113) oder 80 Bit (Ziffern = 64) .
Es wäre nicht praktisch, float32_t
Als solches zu haben, da Sie normalerweise, falls verfügbar, Gleitkommahardware verwenden und nicht auf eine Softwareimplementierung zurückgreifen möchten.
Wenn Sie der Meinung sind, dass typedefs wie float32_t und float64_t aus irgendwelchen Gründen unpraktisch sind, müssen Sie sich an Ihr bekanntes Betriebssystem, den Compiler, gewöhnt haben, dass Sie nicht zu weit außerhalb Ihres Nestes schauen können.
Es gibt Hardware, die nativ 32-Bit-IEEE-Gleitkommaoperationen ausführt, und andere, die 64-Bit ausführen. Manchmal müssen solche Systeme sogar miteinander sprechen. In diesem Fall ist es äußerst wichtig zu wissen, ob ein Double auf jeder Plattform 32 Bit oder 64 Bit ist. Wenn die 32-Bit-Plattform auf der Grundlage der 64-Bit-Werte der anderen Plattform übermäßige Berechnungen durchführen sollte, sollten Sie je nach Timing- und Geschwindigkeitsanforderungen möglicherweise auf die niedrigere Genauigkeit umwandeln.
Ich persönlich fühle mich unwohl, wenn ich Floats und Doubles benutze, es sei denn, ich weiß genau, wie viele Bits sich auf meiner Platte befinden. Umso mehr, wenn ich diese über einen Kommunikationskanal auf eine andere Plattform übertragen möchte.
Derzeit wird vorgeschlagen, der Sprache die folgenden Typen hinzuzufügen:
decimal32
decimal64
decimal128
die eines Tages zugänglich sein kann durch #include <decimal>
.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html