我看到很多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
否则 x 将始终为 0。
如果a
是int
,这两行绝对不等价:
浮点数 b = 3.0f * a;
浮点数 b = 3 * a;
如果a
太大,第二个将静默溢出,因为右侧是使用整数算法计算的。但第一个是完全安全的。
但是,如果a
是一个float
,如您的示例所示,则这两个表达式是等效的。您使用哪一个是个人喜好的问题;第一个可能更卫生。
这在某种程度上取决于您如何处理这些数字。带有f
或F
的浮点文本的类型为 float
。不带后缀的浮点文本的类型为 double
类型。因此,与不使用f
后缀相比,使用后缀可能会有细微差别。
只要子表达式至少涉及一个浮点类型的对象,它可能就无关紧要。更重要的是使用带有整数的后缀来解释为浮点数:如果子表达式中不涉及浮点值,则使用整数算术。这可能会产生重大影响,因为结果将是一个整数。
float b = 3.0f * a;
有时这样做是因为您想确保 3.0 创建为浮点数而不是双精度型。