Ich habe eine Frage zu dem folgenden Zitat (N3797, 3.9.1 / 8):
Die Wertdarstellung von Fließkommatypen ist implementierungsdefiniert.
Soweit ich es verstehe, gibt es der Implementierung völlige Freiheit beim Definieren der Grenzen von Gleitkommazahlen . Sie sind in template<class T> class numeric_format
angegeben. Zum Beispiel,
Meine Frage ist: Können obere und untere Grenzen für Fließkommazahlen beliebig hoch oder niedrig sein, oder gibt es Einschränkungen? Bietet reines C auch eine implementierungsdefinierte Menge von Werten für Fließkommazahlen?
Ich vermute, das hängt von der Architektur ab, mit der wir arbeiten.
Die Grenzen für integrierte Typen werden meist durch die Hardwaregrenzen eingeschränkt. x64-CPUs verwenden normalerweise IEEE 754 Darstellungen für ihre Fließkommadaten, wie im FPA-Standard (Hardware-Coprozessor) definiert.
>Wie auch immer die Dinge intern dargestellt und gehandhabt werden, kann variieren, wie Sie festgestellt haben
Die Wertdarstellung von Fließkommatypen ist implementierungsdefiniert
Ein Compiler verfügt normalerweise über Kenntnisse (insbesondere über das Backend, das die Codegenerierung durchführt) des zugrundeliegenden Zielsystems und kann daher bei Aufforderung mit fp-arithmetic die richtigen Anweisungen wählen.
Sie können immer einen benutzerdefinierten Datentyp definieren, der physische Ressourcen selbst verwaltet. Der Begriff, auf den Sie sich beziehen, könnte Arbitrary arithmetic sein (normalerweise wesentlich langsamer, wenn Ihre Daten in die Hardware passen Angebote, sollten Sie dafür gehen).
In bestimmten Fällen (z. B. bei einigen eingebetteten Einheiten, bei denen keine FPU verfügbar ist oder eine Gleitkommaoperation nicht ausgeführt werden kann), könnte eine Emulation verwendet werden. Dies ist billiger (weniger Transistoren), obwohl langsamer.
obere und untere Grenzen hängen von der Implementierung von Gleitkommazahlen durch Compiler ab. Es ist also nicht nur ein benutzerdefiniertes Limit. es ist vielmehr die mathematische Einschränkung, die von dem Speicherlayout abhängt, wie es vom Compiler zum Speichern von Gleitkommazahlen entworfen wurde.
Wenn Sie user-defined limit
verwenden möchten, können Sie Ihre eigene Integer-Klasse verwenden, die Operatoren für numerische Operationen überlädt und Ihre benutzerdefinierte Grenze vor jeder Operation anwendet.
In Ebene C können Sie #include <float.h>
angeben, das Konstanten wie folgt bereitstellt:
und wie viele Bits & amp; Ziffern die Mantisse ist, Exponent Bereich, etc.
Ich bin immer verwirrt darüber, welche der C ++ - Referenzseiten die ist, "die du hier posten darfst und welche du nicht sollst, weil du Kommentare darüber bekommst", aber hier ist eine in Google: Ссылка Da dies eher eine Standarddatei ist, erwarte ich, dass es sowieso keinen so großen Unterschied gibt. Dies bezieht sich natürlich auf die "C ++ - Version", aber die definierten Makros sind für C gleich.
(Beachten Sie, dass das C ++ limits
normalerweise von denselben Konstanten implementiert wird, die in float.h
in gewisser Hinsicht direkt oder indirekt gefunden werden)
Tags und Links c c++ floating-point