如果我定义一个浮点数,是否需要指定x.yf?

时间:2014-11-07 14:33:58

标签: c types floating-point double

所以我的问题是否是

float a = 1.5 + 1.3;

完全可以,或者如果需要的话:

float a = 1.5f + 1.3f;

我被告知C编译器将没有f的float作为double,并且这种情况可能导致在某处进行不准确的计算。

这是正确的还是原始方式足够?

2 个答案:

答案 0 :(得分:4)

float a = 1.5 + 1.3;相当于float a = (float) (1.5 + 1.3);,其中double常量之间的加法是double。(*)

a中的最终结果与添加单精度常量之间的单精度相加大致相同。实际上,从某种意义上说,单精度版本更可能最接近float到28/10,而不是计算机转换为浮动更好精确。使用最佳可用精度进行计算并转换为float进行存储是IEEE 754标准化这么多精度的原因之一(映射到floatdouble,有时{{1在C)。

(*)为简单起见,本答案假定您的编译器实现long double = 0。当编译器实现FLT_EVAL_METHOD> 0时,它会自动存储FLT_EVAL_METHOD等常量,并以更好的可用精度计算中间结果,正是因为这是一件好事。

答案 1 :(得分:1)

float a = 1.5 + 1.3;

没关系,但通常会收到编译器警告,例如

truncation from 'double' to 'float'

这不是一个小问题。

但是最好使用float的f后缀而不使用douuble的后缀。