Unendlichkeit in MSVC ++

7

Ich verwende MSVC ++, und ich möchte den speziellen Wert INFINITY in meinem Code verwenden.

Welches Bytemuster oder welche Konstante wird in MSVC ++ für unendlich verwendet?

Warum scheint 1.0f / 0.0f den Wert 0 zu haben?

%Vor%     
bobobobo 29.03.2010, 13:51
quelle

5 Antworten

19

Verwenden Sie numeric_limits :

%Vor%     
GManNickG 29.03.2010, 13:55
quelle
11

printf("%x\n", inf) erwartet eine Ganzzahl (32 Bit auf MSVC), erhält aber ein Double. Heiterkeit wird folgen. Err, ich meine: undefiniertes Verhalten.

(Und ja, es erhält ein Double, da für eine Liste mit variablen Argumenten floats auf double hochgestuft werden).

Wie auch immer, Sie sollten numeric_limits verwenden, wie auch die andere Antwort sagt.

    
peterchen 29.03.2010 13:59
quelle
3

In der Variablenargumentliste für printf werden Floats zu doubles hochgestuft. Die Kleinendian-Byte-Darstellung von Unendlich als Doppel ist 00 00 00 00 00 00 00 F0 7F.

Wie schon erwähnt, erwartet "% x" ein int, nicht ein double. Printf betrachtet also nur die erste Größe von (int) Bytes des Arguments. Keine Version von MSVC ++ definiert int als größer als 4 Byte, so dass Sie nur Nullen erhalten.

    
dan04 14.04.2010 13:16
quelle
2

Sehen Sie sich numeric_limits::infinity an.

    
fretje 29.03.2010 13:54
quelle
2

Das passiert, wenn du zu printf () lügst, es ist falsch. Wenn Sie den Formatierungsbezeichner% x verwenden, erwartet er, dass eine Ganzzahl auf dem Stapel übergeben wird, nicht ein Float, der auf dem FPU-Stapel übergeben wird. Korrektur:

%Vor%

Sie können die Unendlichkeit aus der Header-Datei <limits> C ++ erhalten:

%Vor%     
Hans Passant 29.03.2010 14:02
quelle