Gleitkomma-Ausgabelänge in Bits
-
21-12-2019 - |
Frage
Obwohl es einfach ist, konnte ich es beim Googeln nicht finden.Wie wir wissen, unterstützt die Gleitkommadarstellung einen größeren Zahlenbereich und die Operation ist langsamer als bei reinen Ganzzahlen.Wir wissen auch, wie Mantisse und Exponenten zur Darstellung eines Gleitkommas verwendet werden.Aber meine Frage ist, dass beispielsweise in einem 32-Bit-System s* b^e die Ausgabe länger als 32-Bit oder 32 Bit ist?(wobei s=Signifikand, b=Basis, e=Exponent)
Lösung
Die genaue Anzahl der Bits, die zur Darstellung der Mantisse und des Exponenten von Gleitkommazahlen verwendet werden, variiert von CPU zu CPU, daher ist die Frage sicherlich architekturabhängig.
Es gibt einen Standard, der sehr vorherrschend ist: IEEE-Gleitkomma, und entsprechend diese verwandte SO-Frage Alle wichtigen CPUs, die Sie heute wahrscheinlich treffen werden, implementieren es, einschließlich IA32.
Laut Wikipedia erfordert IEEE Floating Point, dass bei jeder Implementierung mindestens eine der folgenden Optionen verfügbar ist:
- binär32:24-Bit-Mantisse (einschließlich 1 Vorzeichenbit) und 8-Bit-Exponent
- binär64:53-Bit-Mantisse (einschließlich 1 Vorzeichenbit) und 11-Bit-Exponent
Angenommen, mit 32 Bit meinen Sie das IA 32-Familie (was nur eine der wenigen Architekturen ist, die 32 Bit verwenden), dann die Gleitkommaregister kann bis zu 80 Bit enthalten, was bedeutet, dass Binär32, Binär64 und ein Nicht-IEC-80-Bit-Format mit 15 Exponentenbits unterstützt werden können.Um zwischen 32-Bit- und 64-Bit-Anweisungen zu unterscheiden, verwenden die meisten Assembler Größenmodifikatoren wie QWORD
oder DWORD
.
Neben CPU-Implementierungen können Sprachen auch die Einhaltung von IEEE Floating Point erfordern.In der C-Sprache beispielsweise gibt Anhang 7 an, dass das Makro __STDC_IEC_599__
wird dann automatisch vom Compiler definiert float
ist garantiert binär32 und double
binär64. long double
ist nicht auf IEC festgelegt und könnte daher 80 Bit auf einem IA32-Arch verwenden.