c - 如果定义 float ,是否需要指定 x.yf?

标签 c types floating-point double

所以我的问题是是否

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 标准化如此多精度的原因之一(映射到 floatdouble ,有时在 C 中是 long double

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

关于c - 如果定义 float ,是否需要指定 x.yf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803543/

相关文章:

c - OpenCL 程序使用太多内存

c# - 这是什么类型的显式?

php - 将货币格式的字符串转换为 float

c - 使用数组读取和写入文本文件

c - 验证 do-while 循环中的输入类型

c - 反向冒泡排序保留头寸索引?

.net - 在哪里可以找到Powershell .NET类型加速器的列表?

java - ArrayList 的类型不兼容错误

c - 添加浮点值不正确

c++ - 点积/w Neon Intrinsics