在C ++中对float变量执行算术时是否总是需要使用float文字?

时间:2012-09-21 18:00:11

标签: c++ performance floating-point floating-accuracy floating-point-precision

我看到很多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,对吗?

4 个答案:

答案 0 :(得分:6)

您需要在以下情况下使用它:

float x = 1/3;

1或3需要.0,否则x将始终为0。

答案 1 :(得分:1)

如果aint,则这两行绝对不相同:

  

浮动b = 3.0f * a;
  float b = 3 * a;

如果a太大,第二个会静默溢出,因为右侧是使用整数运算来计算的。但第一个是完全安全的。

但是,如果afloat,如示例所示,那么这两个表达式是等价的。你使用哪一个是个人偏好的问题;第一个可能是更多的hygeinic。

答案 2 :(得分:0)

float b = 3.0f * a; 

有时这样做是因为你想确保3.0被创建为float而不是double。

答案 3 :(得分:0)

这在某种程度上取决于你对这些数字的处理方式。带fF的浮点字面值的类型为float。没有后缀的浮点文字的类型是double类型。因此,与不使用f后缀相比,使用{{1}}后缀可能存在细微差别。

只要子表达式涉及至少一个浮点类型的对象,它可能并不重要。使用带有整数的后缀更重要的是将其解释为浮点:如果子表达式中没有涉及浮点值,则使用整数运算。这可能会产生重大影响,因为结果将是一个整数。