Поскольку номера с плавающей запятой по умолчанию имеют тип double
. Чтобы сделать его плавающим, добавьте F
. Вы получаете ошибку в приведенном ниже присваивании:
float f = 3.4028235E38;
потому что двойной, как больше точности, чем поплавок. Таким образом, возможна потеря точности.
I would have expected just the opposite as floating point literals are by default double and should be more precise.
Давайте проверим бинарное представление Вашего номера до двойной точности:
0x47EFFFFFE54DAFF8 = 01000111 11101111 11111111 11111111
11100101 01001101 10101111 11111000
Теперь, поскольку float
является одинарной точности 32-битное значение с плавающей точкой. Он не может хранить все двойные значения, которые представляют собой 64-битные значения с плавающей запятой с двойной точностью.
Да, 'double' точнее, чем' float'. Поэтому, когда вы конвертируете из 'double' в' float', вы можете потерять информацию. Таким образом, преобразование является явным. Не уверен, что есть еще что сказать ... –
float не шире, чем двойной. Это наоборот. Изменить: о, вы удалили эту фразу из вопроса. – BalusC
@mark_huffington ваша аналогия изображения хорошая, но ваш вывод неверен. Вы можете думать о двойном как изображение 100x100, а float - как изображение 50x50. Конечно, вы можете использовать оба изображения для хранения изображения одного и того же объекта, но 100x100 будет более подробным. Поэтому, если вы конвертируете его в 50x50, вы потеряете разрешение. Точно так же можно использовать float и double для представления числа с плавающей запятой, но double может сделать это более точно. –