Преобразования объектов с плавающей запятой
Объект типа с плавающей запятой можно безопасно преобразовать в более точный тип с плавающей запятой, то есть без потери значимости. Например, преобразования из типа float в double или из типа double в long double являются безопасными, а значение не меняется.
Объект типа с плавающей запятой также можно преобразовать в менее точный тип, если он находится в диапазоне, который может быть представлен этим типом. (См. диапазоны типов с плавающей запятой в разделе Ограничения чисел с плавающей запятой.) Если исходное значение невозможно представить точно, его можно преобразовать в следующее более высокое или низкое значение, которое может быть представлено. Если такого значения не существует, результат не определен. Рассмотрим следующий пример:
cout << (float)1E300 << endl;
Максимальное значение, которое может быть представлено типом float, — 3,402823466E38, то есть гораздо меньше, чем 1E300. Поэтому число преобразуется в бесконечность, а результат имеет вид 1,#INF.