bit-representation

___ answer15301574 ___

Kurz gesagt, nein. Wenn %code% , dann du kenne das Format von %code% , mehr oder weniger: du musst noch Bestimmen Sie die Byte-Reihenfolge. Für alles andere sind alle Wetten deaktiviert. (Die anderen Formate, die ich kenne und die noch immer benutzt werden, sind nicht gleich Basis 2: IBM Mainframes verwenden zum Beispiel die Basis 16) "Standard" -Anordnung eines IEC-Gleitkommazeichens hat das Vorzeichen an das höherwertige Bit, dann der Exponent und die Mantisse auf der Bits niedriger Ordnung; wenn Sie es als erfolgreich ansehen können %code% , zum Beispiel (via %code% , %code% oder %code% - 'memcpy funktioniert garantiert, ist aber weniger effizienter als die anderen beiden), dann:

für %code% :

%Vor%

für 'float:

%Vor%

In Bezug auf %code% ist es schlimmer, weil anders Compiler behandeln es anders, sogar auf der gleichen Maschine. Nominell ist es zehn Bytes, aber aus Gründen der Ausrichtung kann es in Tatsache sein 12 oder 16. Oder nur ein Synonym für %code% . Wenn es ist Mehr als 10 Bytes, denke ich kannst du darauf zählen, dass es gepackt wird in die ersten 10 Bytes, so dass %code% die Adresse des 10-Byte-Wertes. Aber im Allgemeinen würde ich vermeiden %code% .

    
___ qstntxt ___

Gibt es eine C ++ - Standardkonforme Methode zum Bestimmen der Struktur von 'float', 'double' und 'long double' zur Kompilierungszeit (oder Laufzeit als Alternative)?

Wenn ich %code% und %code% annahm, vermute ich, dass dies durch die folgenden Regeln möglich ist:

  • erste X-Bits sind die Signifikanden.
  • nächste Y-Bits sind der Exponent.
  • letztes 1-Bit ist das Vorzeichen-Bit.

mit den folgenden vagen Formulierungen:

  • %code%
  • %code%
  • %code%

außer ich weiß

  • %code% enthält das "Integer-Bit", unabhängig davon, ob das Format es explizit darstellt oder nicht, daher weiß ich nicht, wie ich dies programmatisch erkennen und anpassen kann.
  • Ich denke, %code% ist immer %code% .

Hintergrund : Ich versuche zwei Probleme portabel zu lösen:

  • set / get welche Bits im manificand sind.
  • bestimmen, wo das Ende von 'long double' ist, damit ich nicht die impliziten Padding-Bits lesen kann, die nicht initialisierten Speicher haben.
___ answer15301238 ___

Ich würde sagen, dass der einzige tragbare Weg ist, die Nummer als String zu speichern. Dies beruht nicht auf "Bitmuster interpretieren"

Auch wenn Sie wissen, wie viele Bits etwas ist, bedeutet das nicht, dass es die gleiche Repräsentation hat - der Exponent ist nullbasiert oder voreingenommen. Gibt es eine unsichtbare 1 an der Vorderseite der Mantisse? Das Gleiche gilt für alle anderen Teile der Nummer. Und es wird noch schlimmer für BCD-kodierte oder "hexadezimale" Floats - diese sind in einigen Architekturen verfügbar ...

Wenn Sie sich Sorgen um nicht initialisierte Bits in einer Struktur (Klasse, Array usw.) machen, verwenden Sie memset, um die gesamte Struktur auf Null [oder einen anderen bekannten Wert] zu setzen.

    
___ tag123floatingpoint ___ Fließkommazahlen sind Näherungen reeller Zahlen, die größere Bereiche als Ganzzahlen darstellen können, aber die gleiche Menge an Speicher verwenden, auf Kosten geringerer Genauigkeit. Wenn es sich bei Ihrer Frage um kleine arithmetische Fehler (z. B. warum 0,2 + 0,1 ist gleich 0,300000001?) Oder um Dezimalwandlungsfehler handelt, lesen Sie bitte die unten verlinkte Seite "info" vor dem Posten. ___ qstnhdr ___ C ++ Portable Fließkomma Bit Repräsentation? ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123portability ___ Portabler Code kann in mehreren Umgebungen mit wenig bis keinen Änderungen ausgeführt werden. Tragbare Anwendungen können z.B. ein USB-Laufwerk ohne Änderung der Computerumgebung. ___ answer15344949 ___

Für die Nachwelt habe ich das getan.

Um meine IEEE-754-Signalisierungs-NaN-Werte zu generieren und zu testen, verwende ich dieses Muster für 'float' und 'double'.

%Vor%

Für 'long double' verwende ich die 'doppelten' Funktionen beim Casting. Insbesondere erzeuge ich den "doppelten" Wert und wandle ihn vor der Rückgabe in "long double" um, und ich teste das "long double", indem ich es "verdopple" und dann diesen Wert teste. Meine Idee ist, dass das "Long Double" -Format variieren kann, wenn man ein "Double" in ein "Long Double" umwandelt, sollte es später konsistent sein (dh keine Information verlieren) / p>     

___ tag123ieee754 ___ IEEE 754 ist der Standard des Institute of Electrical and Electronics Engineers für Fließkomma-Berechnungen und ist der am weitesten verbreitete und am weitesten verbreitete Fließkomma-Standard. ___ tag123bitpresentation ___ hilf uns dieses Wiki zu bearbeiten ___
3
Antworten

C ++ Portable Fließkomma Bit Repräsentation?

Gibt es eine C ++ - Standardkonforme Methode zum Bestimmen der Struktur von 'float', 'double' und 'long double' zur Kompilierungszeit (oder Laufzeit als Alternative)? Wenn ich std::numeric_limits< T >::is_iec559 == true und std::num...
08.03.2013, 18:44