Konvertierungen von Gleitkommatypen
Ein float-Wert, der in einen double- oder long double-Wert konvertiert wird, oder ein double-Wert, der in einen long double-Wert konvertiert wird, erfährt keine Änderung des Werts. Ein double-Wert, der in einen float-Wert konvertiert wird, wird exakt dargestellt, sofern dies möglich ist. Genauigkeit geht möglicherweise verloren, wenn der Wert nicht exakt dargestellt werden kann. Wenn das Ergebnis außerhalb des gültigen Bereichs liegt, ist das Verhalten nicht definiert. Weitere Informationen über den Bereich von Gleitkommatypen erhalten Sie unter Grenzwerte für Gleitkommakonstanten.
Ein Gleitkommawert wird in einen ganzzahligen Wert konvertiert, indem er zuerst in einen long-Wert und dann von dem long-Wert in den spezifischen ganzzahligen Wert konvertiert wird. Die Nachkommastellen des Gleitkommawerts werden bei der Konvertierung in long verworfen. Wenn das Ergebnis immer noch zu groß ist, um in long zu passen, ist das Ergebnis der Konvertierung nicht definiert.
Microsoft-spezifisch
Wenn eine double- oder long double-Gleitkommazahl in eine kleinere Gleitkommazahl umgewandelt wird und ein Unterlauf auftritt, wird der Wert der Gleitkommavariablen in Richtung 0 (null) abgeschnitten. Ein Überlauf verursacht einen Laufzeitfehler. Beachten Sie, dass der Microsoft C-Compiler long double dem Typ double zuordnet.
END Microsoft-spezifisch
In der folgenden Tabelle werden die Konvertierungen von Gleitkommatypen zusammengefasst.
Konvertierungen von Gleitkommatypen
Von |
Zweck |
Methode |
---|---|---|
float |
char |
Konvertieren zu long; Konvertieren von long zu char |
float |
short |
Konvertieren zu long; Konvertieren von long zu short |
float |
long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long dargestellt zu werden, ist das Ergebnis nicht definiert. |
float |
unsigned short |
Konvertieren zu long; Konvertieren von long zu unsigned short |
float |
unsigned long |
Konvertieren zu long; Konvertieren von long zu unsigned long |
float |
double |
Ändern der internen Darstellung |
float |
long double |
Ändern der internen Darstellung |
double |
char |
Konvertieren zu float; Konvertieren von float zu char |
double |
short |
Konvertieren zu float; Konvertieren von float zu short |
double |
long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long dargestellt zu werden, ist das Ergebnis nicht definiert. |
double |
unsigned short |
Konvertieren zu long; Konvertieren von long zu unsigned short |
double |
unsigned long |
Konvertieren zu long; Konvertieren von long zu unsigned long |
double |
float |
Darstellen als float. Wenn ein double-Wert nicht exakt als float dargestellt werden kann, tritt ein Genauigkeitsverlust auf. Wenn der Wert zu groß ist, um als float dargestellt zu werden, ist das Ergebnis nicht definiert. |
long double |
char |
Konvertieren zu float; Konvertieren von float zu char |
long double |
short |
Konvertieren zu float; Konvertieren von float zu short |
long double |
long |
Beim Dezimaltrennzeichen abschneiden. Wenn das Ergebnis zu groß ist, um als long dargestellt zu werden, ist das Ergebnis nicht definiert. |
long double |
unsigned short |
Konvertieren zu long; Konvertieren von long zu unsigned short |
long double |
unsigned long |
Konvertieren zu long; Konvertieren von long zu unsigned long |
long double |
float |
Darstellen als float. Wenn ein double-Wert nicht exakt als float dargestellt werden kann, tritt ein Genauigkeitsverlust auf. Wenn der Wert zu groß ist, um als float dargestellt zu werden, ist das Ergebnis nicht definiert. |
long double |
double |
Der Wert long double wird als double behandelt. |
Konvertierungen von float, double oder long double-Werten zu unsigned long sind nicht genau, wenn der Wert, der konvertiert wird, größer als der maximale positive long-Wert ist.