Konwersje z typów zmiennoprzecinkowych
Wartość typu float konwertowana na double lub long double albo double konwertowane na long double, nie podlega zmianom wartości.Wartość double konwertowana na wartość float jest dokładnie reprezentowana, jeśli jest to możliwe.Precyzja może zostać utracona, jeśli wartość nie może być przedstawiona dokładnie.Jeśli wynik jest poza zakresem, zachowanie jest niezdefiniowane.Zobacz Limity na stałych zmiennoprzecinkowych, aby zapoznać się z zakresem typów zmiennoprzecinkowych.
Wartość zmiennoprzecinkowa jest konwertowana na wartość całkowitą przez konwersję najpierw na long, następnie z long na określoną wartość całkowitą.Część dziesiętna wartości zmiennoprzecinkowej zostaje odrzucona podczas konwersji na long.Jeśli wynik jest nadal zbyt duży, aby pasował do long, wynik konwersji jest niezdefiniowany.
Specyficzne dla firmy Microsoft
Podczas konwertowania liczby zmiennoprzecinkowej double lub long double na mniejszą liczbę zmiennoprzecinkową, wartość zmiennoprzecinkowa zmiennej jest obcinana w kierunku zera po wystąpieniu niedomiaru.Przepełnienie powoduje błąd czasu wykonania.Należy zauważyć, że kompilator Microsoft C mapuje long double na typ double.
KONIEC informacji specyficznych dla firmy Microsoft
W poniższej tabeli podsumowano konwersje z typów zmiennoprzecinkowych.
Konwersje z typów zmiennoprzecinkowych
Z |
Do |
Metoda |
---|---|---|
typ float |
char |
Konwertuje na long; konwertuje long na char |
typ float |
short |
Konwertuje na long; konwertuje long na short |
typ float |
long |
Obcina na przecinku dziesiętnym.Jeśli wynik jest zbyt duży, aby go reprezentować jako long, wynik jest niezdefiniowany. |
typ float |
niepodpisany short |
Konwertuje na long; konwertuje long na unsigned short |
typ float |
unsigned long |
Konwertuje na long; konwertuje long na unsigned long |
typ float |
double |
Zamienianie wewnętrznej reprezentacji |
typ float |
long double |
Zamienianie wewnętrznej reprezentacji |
double |
char |
Konwertuje na float; konwertuje float na char |
double |
short |
Konwertuje na float; konwertuje float na short |
double |
long |
Obcina na przecinku dziesiętnym.Jeśli wynik jest zbyt duży, aby go reprezentować jako long, wynik jest niezdefiniowany. |
double |
niepodpisany short |
Konwertuje na long; konwertuje long na unsigned short |
double |
unsigned long |
Konwertuje na long; konwertuje long na unsigned long |
double |
typ float |
Reprezentuje jako float.Jeśli wartość double nie może być reprezentowana dokładnie tak, jak float, występuje utrata precyzji.Jeśli wartość jest zbyt duża, aby być reprezentowana jako float, wynik jest niezdefiniowany. |
long double |
char |
Konwertuje na float; konwertuje float na char |
long double |
short |
Konwertuje na float; konwertuje float na short |
long double |
long |
Obcina na przecinku dziesiętnym.Jeśli wynik jest zbyt duży, aby go reprezentować jako long, wynik jest niezdefiniowany. |
long double |
niepodpisany short |
Konwertuje na long; konwertuje long na unsigned short |
long double |
unsigned long |
Konwertuje na long; konwertuje long na unsigned long |
long double |
typ float |
Reprezentuje jako float.Jeśli wartość double nie może być reprezentowana dokładnie tak, jak float, występuje utrata precyzji.Jeśli wartość jest zbyt duża, aby być reprezentowana jako float, wynik jest niezdefiniowany. |
long double |
double |
Wartość long double jest traktowana jako double. |
Konwersje z wartości float, double lub long double na unsigned long nie są dokładne, jeśli konwertowana wartość jest większa niż maksymalna dodatnia wartość long.