Подтвердить что ты не робот

Java: зачем вам нужно указывать 'f' в потоковом литерале?

Зачем вам нужно указывать суффикс f в потоковом литерале?

4b9b3361

Ответ 1

Потому что в противном случае он по умолчанию имеет значение double, который является более часто используемым типом с плавающей запятой, чем float.

Из Спецификация языка Java, раздел 3.10.2:

Литерал с плавающей запятой имеет тип float, если он суффикс с буквой ASCII F или f; в противном случае его тип двойной, и он может быть дополнительно суффикс с буквой ASCII D или d (§4.2.3).

(Лично я предпочел бы, чтобы не было дефолта, чтобы было ясно, во всех случаях, но это другое дело.)

Ответ 2

Поскольку нереализованные литералы с плавающей запятой удваиваются, а округление означает, что даже маленькие литералы могут принимать разные значения при округлении до плавания и двойного. Это можно наблюдать в следующем примере:

float f = (float) 0.67;
if(f == 0.67) 
  System.out.print("yes");
else 
  System.out.print("no");  

Это выведет no, потому что 0.67 имеет другое значение при округлении до плавания, чем при округлении до двойного. С другой стороны:

float f = (float) 0.67;
if(f == 0.67f) 
  System.out.print("yes");
else 
  System.out.print("no");

& hellip; выходы yes.

ИЗМЕНИТЬ
Второй пример:

if(0.67 == 0.67f) 
  System.out.print("Equal");
else 
  System.out.print("Not Equal");  

Ответ 3

Существует два типа с плавающей запятой, которые могут быть представлены, например. 100.0. По умолчанию может быть только один. Из-за своей ограниченной точности float является чрезвычайно специализированным типом. Обычный случай - двойной, поэтому он является соответствующим по умолчанию.

В современных процессорах float и double имеют аналогичную вычислительную производительность. Единственный случай использования float - большие массивы в критически важных ситуациях, требующих ограниченной точности. Использование float удваивает количество значений с плавающей запятой, которые соответствуют одной строке кеша. Даже тогда, выясняя, является ли float достаточной точностью для данного вычисления, редко бывает тривиальным.