【发布时间】: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