Почему float по умолчанию инициализируется как double?
Прочёл о том что при объявлении переменной типа float, значение в ней хранится как double, а для того чтобы задать тип хранения как float мы используем букву f.
Почему это так? Ведь float это тип меньший чем double. То есть double занимает 8 байт(минимум), а float 4 байта(минимум), то есть мы храним число в типе большего представления, в переменной меньшего размера.
Прочёл о том что при объявлении переменной типа float, значение в ней хранится как double, а для того чтобы задать тип хранения как float мы используем букву f.
Покажи пожалуйста источник, где ты это прочел именно в такой подаче.
Герман , это, выходит, ты так понял следующие слова?
Обратите внимание, что литералы типа с плавающей запятой по умолчанию относятся к типу double. Суффикс f используется для обозначения литерала типа float.
Так ты их полностью неправильно понял.
Суффикс (а на самом деле это вовсе не суффикс, а идентификатор литерала вещественного числа) f выполнит преобразование своего аргумента и приведет его к типу float. Если этот идентификатор не использовать, то, согласно стандарту, литерал с плавающей точкой имеет тип double, но сужающая конверсия типа все равно будет иметь место для случая, когда литерал используется для инициализации значения отличного от типа double.
Евгений Шатунов, тогда для чего он нужен?
f приводит литерал к типу float, верно? Если да, то получается, что мы можем использовать сразу float, а не запихивать в double число с f.
Герман, Можно и не использовать суффиксы (компилятор преобразует во float сам), но тогда при компиляции можете получить предупреждение о потере значимости (при определенных опциях компиляции).
В переменной типа float не может храниться double. В случае подобной операции double преобразуется во float с потерей значимости. Преобразовать можно явно или не явно. Указывая суффикс вы явно говорите компилятору, что это константа типа float. Кроме того, что суффиксы избавляют от лишних предупреждений, это еще и хороший тон.