Я вижу много кода на C ++ с такими строками:
float a = 2;
float x = a + 1.0f;
float b = 3.0f * a;
float c = 2.0f * (1.0f - a);
Эти .0f
после этих литералов действительно нужно? Потеряли бы вы числовую точность, если бы не указали их?
Я думал, что они вам нужны, только если у вас есть такая строка:
float a = 10;
float x = 1 / a;
где вы должны использовать 1.0f
, право?
Вам нужно будет использовать его в следующем случае:
float x = 1/3;
1 или 3 должен иметь .0
иначе х всегда будет 0.
Если a
является int
эти две строки определенно не эквивалентны:
поплавок b = 3,0f * a;
float b = 3 * a;
Второй будет тихо переполнен, если a
слишком большой, потому что правая часть вычисляется с использованием целочисленной арифметики. Но первое совершенно безопасно.
Но если a
это float
, как в ваших примерах, тогда оба выражения эквивалентны. Какой из них вы используете, это вопрос личных предпочтений; первое, вероятно, более гигиенично.
Это зависит от того, что вы делаете с числами. Тип литерала с плавающей запятой с f
или же F
имеют тип float
, Тип литерала с плавающей точкой без суффикса имеет тип double
, В результате при использовании f
суффикс по сравнению с неиспользованием.
Пока подвыражение включает хотя бы один объект типа с плавающей точкой, это, вероятно, не имеет большого значения. Более важно использовать суффиксы с целыми числами, которые будут интерпретироваться как числа с плавающей запятой: если в подвыражении не используется целочисленная арифметика, не используется значение с плавающей запятой. Это может иметь серьезные последствия, потому что результатом будет целое число.
float b = 3.0f * a;
Иногда это делается потому, что вы хотите убедиться, что 3.0 создан как float, а не как double.