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