Преобразования из типов с плавающей запятой
Значение float, преобразованное в double или long double, либо значение double, преобразованное в long double, не меняется. Значение double, преобразованное в значение float, по возможности представляется в точности. Точность может быть потеряна, если значение невозможно представить в точности. Если результат выходит за пределы диапазона, поведение не определено. Диапазон типов с плавающей запятой см. в разделе Ограничения констант с плавающей запятой.
Для преобразования значения с плавающей запятой в целочисленное значение сначала следует преобразовать его в значение long, а затем из значения long — в определенное целочисленное значение. Дробная часть значения с плавающей запятой игнорируется при преобразовании в значение long. Если результат по-прежнему слишком большой для представления в качестве значения long, результат преобразования не определен.
Блок, относящийся только к системам Microsoft
При преобразовании числа с плавающей запятой double или long double в меньшее число с плавающей запятой дробная часть значения переменной с плавающей запятой отбрасывается, если происходит потеря точности. При переполнении возникает ошибка времени выполнения. Обратите внимание, что компилятор Microsoft C сопоставляет long double с типом double.
Завершение блока, относящегося только к системам Microsoft
В следующей таблице перечислены преобразования из типов с плавающей запятой.
Преобразования из типов с плавающей запятой
Исходный тип |
Целевой тип |
Метод |
---|---|---|
float |
char |
Преобразование в значение long; преобразование значения long в char |
float |
short |
Преобразование в значение long; преобразование значения long в short |
float |
long |
Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен. |
float |
unsigned short |
Преобразование в значение long; преобразование значения long в unsigned short |
float |
unsigned long |
Преобразование в значение long; преобразование значения long в unsigned long |
float |
double |
Изменение внутреннего представления |
float |
long double |
Изменение внутреннего представления |
double |
char |
Преобразование в значение float; преобразование значения float в char |
double |
short |
Преобразование в значение float; преобразование значения float в short |
double |
long |
Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен. |
double |
unsigned short |
Преобразование в значение long; преобразование значения long в unsigned short |
double |
unsigned long |
Преобразование в значение long; преобразование значения long в unsigned long |
double |
float |
Представление в качестве значения float. Если значение double невозможно представить в точности как значение float, происходит потеря точности. Если значение слишком большое для представления в качестве значения float, результат не определен. |
long double |
char |
Преобразование в значение float; преобразование значения float в char |
long double |
short |
Преобразование в значение float; преобразование значения float в short |
long double |
long |
Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен. |
long double |
unsigned short |
Преобразование в значение long; преобразование значения long в unsigned short |
long double |
unsigned long |
Преобразование в значение long; преобразование значения long в unsigned long |
long double |
float |
Представление в качестве значения float. Если значение double невозможно представить в точности как значение float, происходит потеря точности. Если значение слишком большое для представления в качестве значения float, результат не определен. |
long double |
double |
Значение long double обрабатывается как double. |
Преобразования из значения float, double или long double в unsigned long не точные, если преобразуемое значение больше максимального положительного значения long.