В чем разница между 1.0f и 1.f?

Как поклонник Джона Кармака, я читал общедоступный документ Id Tech Coding Conventions (по адресу ftp://). ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc, если вам интересно), и наткнулся на соглашение, которое я не совсем понял:

Используйте спецификацию точности для значений с плавающей запятой, если нет явной необходимости в двойном значении.

float f = 0.5f

Вместо

float f = 0.5;

И

float f = 1.0f;

Вместо

float f = 1.f;

Чем они отличаются?

Я могу понять разницу между ними в первом примере (последний выполняет преобразование double-to-float под капотом), хотя я подозреваю, что ему нужен только неглупый компилятор, чтобы поймать и создать тот же байт-код, для отсутствия разницы во времени выполнения.

Но есть ли случай, когда добавление завершающих нулей к вашему объявлению значения с плавающей запятой меняет ситуацию?


person Ben Walker    schedule 24.02.2013    source источник
comment
В контексте это больше похоже на опечатку, поскольку оба они имеют спецификацию точности. Однако версия 1.0f все еще более читабельна.   -  person Maciej Stachowski    schedule 24.02.2013
comment
Вероятно, автор хотел предложить float f = 1.0f; вместо float f = 1.0;; наличие или отсутствие суффикса f имеет значение. (И в любом случае лучше использовать double, а не float.)   -  person Keith Thompson    schedule 24.02.2013
comment
Хороший компилятор должен предупреждать, если вы инициализируете float константой double, значение которой изменяется при преобразовании в float, но, как правило, он не должен давать такой же код, как если бы константа была дополнена суффиксом f. Это связано с тем, что некоторые числа отличаются при первом преобразовании в double, а затем в float, чем при прямом преобразовании в float. Для программиста было бы необычно использовать их намеренно, но это законное использование языка и должно быть скомпилировано, как указано.   -  person Eric Postpischil    schedule 24.02.2013


Ответы (1)


Но есть ли случай, когда добавление завершающих нулей к вашему объявлению значения с плавающей запятой меняет ситуацию?

Единственная «вещь», которую изменит добавление нуля, — это удобочитаемость. Результирующий код будет точно таким же, потому что компиляторам все равно, но константа с нулем будет легче читать людям.

person Sergey Kalinichenko    schedule 24.02.2013
comment
Читабельность! Так часто упускают из виду. - person Johnsyweb; 24.02.2013
comment
Имеет значение только для людей, да. Там для удобства чтения, может быть, нет. Большинство людей, имеющих дело с числами, следуют соглашению, согласно которому конечные нули обозначают количество значащих цифр. - person Ben Voigt; 24.02.2013