Es scheint, dass Sie diese Floats als 2 Ganzzahlen darstellen könnten:
Sie können diese Werte als 2 Ganzzahlen darstellen, aber das wäre wirklich ineffizient und Sie würden gegen den IEEE 754-Standard verstoßen, der Fließkommazahlen innerhalb einer bestimmten Architektur definiert.
Ich fange damit an, nur zu verstehen, warum Floats nicht einfach als ganze Zahlen dargestellt werden können.
Sie werden tatsächlich durch ganze Zahlen dargestellt. Der IEEE 754-Standard definiert Folgendes für ein Fließkomma-Format. Wie bei jedem Typ, den Sie definieren können, sind Sie auf das beschränkt, was die Architektur versteht, im Fall von Zahlen, die im Wesentlichen Ganzzahlen wären.
Endliche Zahlen, die durch drei ganze Zahlen beschrieben werden können: s = ein Vorzeichen (null oder eins), c = ein Signifikand (oder Koeffizient) mit nicht mehr als p Ziffern, wenn in Basis b geschrieben (dh eine ganze Zahl im Bereich bis 0) zu bp-1) und q = ein Exponent, so dass emin ≤ q + p - 1 ≤ emax ist. Der numerische Wert einer solchen endlichen Zahl ist (−1) s × c × bq. [A] Außerdem gibt es zwei Nullwerte, die als vorzeichenbehaftete Nullen bezeichnet werden: Das Vorzeichenbit gibt an, ob eine Null +0 (positive Null) oder - ist. 0 (negative Null).
Quelle
Der Grund für mich ist, dass ich daran interessiert bin, willkürliche Präzisionsschwebekörper für mathematische Zwecke darzustellen, während sie gleichzeitig mit den üblichen "kleinen" Schwimmern wie 1.1 und 1.123 für Animationen oder andere Zwecke arbeitet. Und das System hätte nur einen "Zahlentyp", um beide Fälle auf ähnliche Weise zu behandeln.
In den meisten Programmiersprachen können Sie einen neuen Typ definieren. Anschließend können Sie ein neues Fließkommaformat definieren, sofern Sie dem Standard folgen. Dies bedeutet, dass der Typ die drei Ganzzahlen behandeln muss, wie sie vom IEEE-Standard definiert sind.
Nicht sicher, ob Sie sagen, die Befolgung des IEEE-Standards mit 3 Ganzzahlen würde zu einer guten Leistung führen oder nicht, verglichen mit der Verwendung der Gleitkomma-Hardwareregister und dergleichen.
Ich werde noch einmal wiederholen, was Sie beschreiben, würde den IEEE-Standard verletzen. Es wäre auch ineffizient. Um den Grund zu verstehen, machen die meisten Programmiersprachen nicht den Versuch, einen Gleitkomma-Typ mit einstelliger Genauigkeit zu definieren. Sie müssen Computerregister verstehen. Die Größe eines Computerregisters ist spezifisch, das heißt, ein 32-Bit-Register speichert 32 Bit, selbst wenn sie alle Nullen enthalten, sodass ein Gleitkommawert mit einstelliger Genauigkeit immer noch ein 32-Bit-Register verwenden würde.
Mit anderen Worten, alle Ihre Beispiele werden bereits durch das bereits vorhandene Gleitkommaformat mit einfacher Genauigkeit behandelt.
Quelle
Sie können ein Format mit einer einzelnen Vorzeichenstelle, einer einzelnen Exponentenstelle und einer einzelnen Bruchzahl definieren. Dies würde jedoch genauso viel Speicher erfordern wie das im Bild beschriebene Format. Aus diesem Grund wäre es also extrem speicherintensiv.