Вероятно, причина в том, что они когда-то написали что-то вроде:
float f = 1 / i; // i an integer
После отладки они поклялись всегда украшать литералы в достаточной степени, чтобы получить правильный тип:
float f = 1.0f / i;
Вв этом случае .0
должен обеспечить деление с плавающей точкой, а не целочисленное деление.f
объясняется тем, что нет необходимости выполнять операцию в double
- я ожидаю, что есть больше шансов на реализацию, где 1.0/i
будет значительно медленнее без пользы (эмуляция поплавка программного обеспечения, безразличная оптимизация), чемтот, где 1.0f
значительно медленнее и бесполезен (если double быстрее, чем float, потому что у вас аппаратное обеспечение fp, поэтому преобразование между ними будет очень быстрым, поэтому не вводите значительное замедление).
Если у вас есть привычка украшать литералы, вы можете написать:
float f = 0.0f;
, хотя он имеет тот же эффект, что и float f = 0.0;
или float f = 0;
.
Конечно, автор, возможно, не прошел через это откровение лично, он мог просто унаследовать стиль кого-то другого, кто это сделал.
Я бы просто написал 0
.
R .. указывает в комментарии еще один ответ, что написание 0 также имеет то преимущество, что при изменении типа f
в будущем вам не нужно обновлять литерал для соответствия.И если присвоение отделено от определения, то изменение:
float f = something
// some time later
f = 0.1f;
на:
double f = something;
// some time later
f = 0.1f;
, вероятно, является ошибкой.Лучше использовать 0.1
и позволить усечению компилятора плавать при необходимости.Вы, вероятно, могли бы утверждать, что использование float
вообще является оптимизацией для пространства, если не для времени, и бремя устранения любых различий между float и double должно учитываться как затраты разработчика на выполнение этой оптимизации.