问题 “1.0f”和“1.f”之间有什么区别?


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

除非明确需要double,否则请使用浮点值的精度规范。

float f = 0.5f

代替

float f = 0.5;

float f = 1.0f;

代替

float f = 1.f;

这些有何不同?

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

但是有没有在你的浮点值声明中添加尾随0的东西改变了什么呢?


12471
2018-02-24 02:53


起源

在上下文中感觉更像是拼写错误,因为两者都有精确的规范。但是,1.0f仍然更具可读性。 - Maciej Stachowski
作者可能意味着建议 float f = 1.0f; 代替 float f = 1.0;;是否存在 f 后缀是重点。 (而且通常使用起来更好 double 而不是 float 无论如何。) - Keith Thompson
如果你初始化一个好的编译器应该警告 float 同 double 常量,其值在转换为时会发生变化 float但是,它通常不应该生成相同的代码,就像常量后缀一样 f。这是因为首次转换时有一些数字不同 double 然后到 float 而不是直接转换为 float。程序员有意使用这些内容是不寻常的,但它是该语言的合法使用,应按照规定进行编译。 - Eric Postpischil


答案:


但是有没有在你的浮点值声明中添加尾随0的东西改变了什么呢?

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


12
2018-02-24 02:56



可读性!经常被忽视。 - Johnsyweb
对人类有意义,是的。有可读性,也许不是。处理数字的大多数人遵循惯例,其中尾随零表示有效数字的数量。 - Ben Voigt