所以我的问题是是否
float a = 1.5 + 1.3;
完全没问题,或者如果需要这样做:
float a = 1.5f + 1.3f;
有人告诉我,C 编译器将不带 f 的 float 视为 double 型,这种情况可能会导致某处计算不精确。
这是正确的还是原来的方式就足够了?
最佳答案
行 float a = 1.5 + 1.3;
相当于 float a = (float) (1.5 + 1.3);
,其中加法是
加法。(*)double
常量之间的 double
a
中的最终结果与单精度常量之间的单精度加法基本相同。事实上,它更好,因为单精度版本更有可能不是最接近 28/10 的float
,而不是转换为 a 的 float计算精度更高。使用最佳可用精度进行计算并转换为 float
进行存储是 IEEE 754 标准化如此多精度的原因之一(映射到 float
、double
,有时在 C 中是 long double
。
(*) 为简单起见,此答案假设您的编译器实现 FLT_EVAL_METHOD
=0。当编译器实现 FLT_EVAL_METHOD
>0 时,它会自动存储 1.3
等常量,并以更好的可用精度计算中间结果,正是因为这是一件好事。
关于c - 如果定义 float ,是否需要指定 x.yf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803543/