如何编写C++浮点字面量?

11

resultfloat 类型,我有三种编写代码的方法:

  • if (result < 0)
  • if (result < 0.)
  • if (result < 0.f)

据我所知,

  • 0 隐式为 int
  • 0. 隐式为 double
  • 0.ffloat 类型。

我更喜欢使用第一种方法,因为它清晰简单,但我是否在强制进行类型转换?


3
编译器已经知道你需要0.f,转换是在编译时应用的。因此,倾向于使用最易读的语法。 - Hans Passant
编译器通常可以比你或我更好地进行优化。 - n. m.
1
个人而言,我更喜欢使用 if (result < 0.f),因为当我看到 if (result < 0) 时,我往往会认为 result 是整数。 - Olivier Sohn
#2 看起来像是一个打字错误,我一点也不喜欢。 - pm100
1
我的个人偏好是 if (result < 0.0)。使用 0.0 告诉用户该值是浮点数。它是 double 而不是 float 的事实不那么重要,任何隐式转换都是精确的。(并且,根据上下文,result 应该一开始就是 double 而不是 float 是完全可能的。)浮点常量可以以 . 结尾,但我发现 0.00. 更易读。 - Keith Thompson
有点偏题:在使用浮点数的比较运算符时要小心。由于舍入误差,结果可能会令人惊讶。例如,float f=0.0f; for(int i=0; i<100; ++i) f+=0.01f; - 在IEEE平台上,结果将不等于1.0f。(因此,在这种情况下,我更喜欢明确地写出0.0f,以便显然比较对浮点行为做出了假设。) - Arne Vogel
1个回答

8

从概念上讲,确实进行了转换。

但是你应该将这样微小的考虑推迟给编译器,并写出最清晰的代码,对我来说是:

if (result < 0)

如果你有任何疑问,请查看生成的汇编代码(使用https://gcc.godbolt.org/非常容易)。
最后,当决定使用float还是double时,请考虑哪个更快速,具体请参考double or float, which is faster?

1
我更进一步地说,从转换的角度来看,0 是最好的选择。至少 0 不会对 result 进行转换,而 0. 可能会导致转换。 - StoryTeller - Unslander Monica
2
顺便说一下,"清晰"有点基于个人观点。对我来说,result < 0.f是清晰的,而result < 0.则是一种误导性的result类型。result < 0则是"中立"的。 - Jarod42
@Jarod42:你是对的;我稍微缓和了一下回答。 - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接