我看到很多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
,对吗?
答案 0 :(得分:6)
您需要在以下情况下使用它:
float x = 1/3;
1或3需要.0
,否则x将始终为0。
答案 1 :(得分:1)
如果a
是int
,则这两行绝对不相同:
浮动b = 3.0f * a;
float b = 3 * a;
如果a
太大,第二个会静默溢出,因为右侧是使用整数运算来计算的。但第一个是完全安全的。
但是,如果a
是float
,如示例所示,那么这两个表达式是等价的。你使用哪一个是个人偏好的问题;第一个可能是更多的hygeinic。
答案 2 :(得分:0)
float b = 3.0f * a;
有时这样做是因为你想确保3.0被创建为float而不是double。
答案 3 :(得分:0)
这在某种程度上取决于你对这些数字的处理方式。带f
或F
的浮点字面值的类型为float
。没有后缀的浮点文字的类型是double
类型。因此,与不使用f
后缀相比,使用{{1}}后缀可能存在细微差别。
只要子表达式涉及至少一个浮点类型的对象,它可能并不重要。使用带有整数的后缀更重要的是将其解释为浮点:如果子表达式中没有涉及浮点值,则使用整数运算。这可能会产生重大影响,因为结果将是一个整数。