6

我看到很多 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

4 回答 4

6

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

float x = 1/3;

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

于 2012-09-21T18:04:01.917 回答
1

如果a是一个int,这两行绝对不等价:

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

如果太大,第二个将静默溢出a,因为右侧是使用整数算术评估的。但第一个是完全安全的。

但是如果a是 a float,就像在你的例子中一样,那么这两个表达式是等价的。您使用哪一个是个人喜好的问题;第一个可能更卫生。

于 2012-09-21T19:05:27.037 回答
0
float b = 3.0f * a; 

有时这样做是因为您想确保将 3.0 创建为浮点数而不是双精度数。

于 2012-09-21T18:15:49.743 回答
0

这在某种程度上取决于您对数字的处理方式。f带有or的浮点字面F量的类型为float。不带后缀的浮点字面量的类型是double. 因此,使用f后缀与不使用后缀可能存在细微差别。

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

于 2012-09-21T18:16:02.727 回答