所以我的问题是否是
float a = 1.5 + 1.3;
完全可以,或者如果需要的话:
float a = 1.5f + 1.3f;
我被告知C编译器将没有f的float作为double,并且这种情况可能导致在某处进行不准确的计算。
这是正确的还是原始方式足够?
答案 0 :(得分:4)
行float a = 1.5 + 1.3;
相当于float a = (float) (1.5 + 1.3);
,其中double
常量之间的加法是double
。(*)
a
中的最终结果与添加单精度常量之间的单精度相加大致相同。实际上,从某种意义上说,单精度版本更可能不最接近float
到28/10,而不是计算机转换为浮动更好精确。使用最佳可用精度进行计算并转换为float
进行存储是IEEE 754标准化这么多精度的原因之一(映射到float
,double
,有时{{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
的后缀。