Conversions from Floating-Point Types
A float value converted to a double or long double, or a double converted to a long double, undergoes no change in value. A double value converted to a float value is represented exactly, if possible. Precision may be lost if the value cannot be represented exactly. If the result is out of range, the behavior is undefined. See Limits on Floating-Point Constants for the range of floating-point types.
A floating value is converted to an integral value by first converting to a long, then from the long value to the specific integral value, as described below in Table 4.4. The decimal portion of the floating value is discarded in the conversion to a long. If the result is still too large to fit into a long, the result of the conversion is undefined.
Microsoft Specific —>
When converting a double or long double floating-point number to a smaller floating-point number, the value of the floating-point variable is truncated toward zero when an underflow occurs. An overflow causes a run-time error. Note that the Microsoft C compiler maps long double to type double.
END Microsoft Specific
Table 4.4 summarizes conversions from floating types.
Table 4.4 Conversions from Floating-Point Types
From | To | Method |
---|---|---|
float | char | Convert to long; convert long to char |
float | short | Convert to long; convert long to short |
float | long | Truncate at decimal point. If result is too large to be represented as long, result is undefined. |
float | unsigned short | Convert to long; convert long to unsigned short |
float | unsigned long | Convert to long; convert long to unsigned long |
float | double | Change internal representation |
float | long double | Change internal representation |
double | char | Convert to float; convert float to char |
double | short | Convert to float; convert float to short |
double | long | Truncate at decimal point. If result is too large to be represented as long, result is undefined. |
double | unsigned short | Convert to long; convert long to unsigned short |
double | unsigned long | Convert to long; convert long to unsigned long |
double | float | Represent as a float. If double value cannot be represented exactly as float, loss of precision occurs. If value is too large to be represented as float, the result is undefined. |
long double | char | Convert to float; convert float to char |
long double | short | Convert to float; convert float to short |
long double | long | Truncate at decimal point. If result is too large to be represented as long, result is undefined. |
long double | unsigned short | Convert to long; convert long to unsigned short |
long double | unsigned long | Convert to long; convert long to unsigned long |
long double | float | Represent as a float. If double value cannot be represented exactly as float, loss of precision occurs. If value is too large to be represented as float, the result is undefined. |
long double | double | The long double value is treated as double. |
Conversions from float, double, or long double values to unsigned long are not accurate if the value being converted is larger than the maximum positive long value.