In this question versuchte das OP einen schwer fassbaren Fehler in einem großen Programm zu isolieren. Er beobachtete einige double
Werte und versuchte dann, sie hart als Eingabe für ein kleineres Testprogramm zu codieren. Die Idee ist großartig, um einen solchen Fehler zu isolieren.Zuweisung einer exakten Darstellung zu einem Gleitkommawert
Verfahren jedoch verletzt die String Aliasing-Regel gewählt, Einführen UB, so ist der Test vollständig unzuverlässig:
Uhr in Debugger den Ausdruck:
+------------------------+----------------------| | Watch Expression | Value | +------------------------+----------------------| | *(long long int *)(&a) | 4594681439063077250 | +------------------------+----------------------|
und weisen dann in das Testprogramm:
double a; *(long long int *)(&a) = 4594681439063077250;
(Ich vermute stark) Er tat dies, um den genauen double
Wert zu erhalten, Stück für Stück.
Die Frage: Wie zu einem Doppel den genauen Wert zuweisen - Bit für Bit - beobachtet in einer Debug-Sitzung?
Warum meinst du "Stück für Stück". A Zahlen eine Zahl, wenn Sie die Nummer kennen und wissen, das Repräsentationsformat Sie wissen, wie es dargestellt wird. –
Erlaubt es Ihr Debugging-Tool, die tatsächlichen Bits in der Variablen oder nur eine dezimale Darstellung zu sehen? – Beta
Sie haben bereits geantwortet, dass dies ein _undefiniertes Verhalten_ bedeutet. Ich bezweifle, dass es einen Weg gibt, ohne _UB_ einzuführen. – user0042