【问题标题】:What is the difference between "1.0f" and "1.f"?“1.0f”和“1.f”有什么区别?
【发布时间】:2013-02-09 11:40:49
【问题描述】:

作为 John Carmack 的崇拜者,我正在阅读 Id Tech 的公开可用的编码约定文档(如果您有兴趣,请访问 ftp://ftp.idsoftware.com/idstuff/doom3/source/CodeStyleConventions.doc),并且遇到了一个我不完全理解的约定:

除非明确需要双精度,否则对浮点值使用精度规范。

float f = 0.5f

代替

float f = 0.5;

float f = 1.0f;

代替

float f = 1.f;

这些有何不同?

我可以理解第一个示例中两者之间的区别(后者在引擎盖下进行双浮点转换),尽管我怀疑它只需要一个不愚蠢的编译器来捕获并生成相同的字节码,没有运行时差异。

但是在任何情况下,在浮点值声明中添加尾随 0 会改变事情吗?

【问题讨论】:

  • 在上下文中感觉更像是一个错字,因为两者都有精确度规范。不过,1.0f 仍然更具可读性。
  • 作者可能是想建议float f = 1.0f;而不是float f = 1.0;f 后缀的存在与否是重点。 (而且通常最好使用double 而不是float。)
  • 如果您用double 常量初始化float,其值在转换为float 时会发生变化,那么一个好的编译器应该会发出警告,但通常它不应该产生与该常量以f 为后缀。这是因为有些数字在先转换为double 再转换为float 时与直接转换为float 时不同。程序员故意使用这些是不寻常的,但这是对该语言的合法使用,应按规定进行编译。

标签: c++ floating-point conventions


【解决方案1】:

但是在任何情况下,在浮点值声明中添加尾随 0 会改变事情吗?

添加零会改变的唯一“事情”是可读性。结果代码将完全相同,因为编译器并不关心,但带有零的常量会更容易被人类读者阅读。

【讨论】:

  • 可读性!经常被忽视。
  • 只对人类有意义,是的。那里是为了可读性,也许不是。大多数处理数字的人都遵循一个惯例,即尾随零表示有效数字的数量。
猜你喜欢
  • 1970-01-01
  • 2012-04-14
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2018-02-11
  • 2010-12-29
相关资源
最近更新 更多