4

我知道用 f 为浮点数添加后缀可以让编译器知道它是浮点数而不是双精度数。在浮点数而不是双精度数上操作时,这对于防止不必要的强制转换很重要。但是,在我由外部公司提供的一些代码中,我看到了以下示例:

double i = 1.4f;

现在我想知道在这种情况下会发生什么?编译器会默默地忽略'f',它只是与任何事情无关的东西,我可以放心地忽略吗?

然后我想知道,如果将数字分配给在其他地方带有 f 后缀的双精度数,而不仅仅是在初始化时,那会是不同的情况吗?

4

2 回答 2

11

C标准的相关引用:

§6.4.4.2 第 4 段

如果以字母 f 或 F 为后缀,则为 float 类型。

第 5 段

浮动常量被转换为内部格式,就像在翻译时一样。

第 7 段

浮动常量的转换时转换应与库函数(如 strtod)对字符串的执行时转换相匹配,给定适合两种转换的匹配输入、相同的结果格式和默认的执行时舍入。

假设 IEEE-754 数字1.4f产生值:

1.39999997615814208984375

1.4有值:

1.399999999999999911182158029987476766109466552734375.
于 2012-05-10T14:16:38.653 回答
3

一个好的编译器应该将 1.4f 直接转换为 double。

兼容的编译器会将 1.4f 转换为floatformat,然后将值转换为double,然后将值分配给i.

顺便说一句,从 FORTRAN 时代开始,一个名为的变量i通常保存整数值。

于 2012-05-10T14:11:53.783 回答