C 如果定义浮点,是否需要指定x.yf?

C 如果定义浮点,是否需要指定x.yf?,c,types,floating-point,double,C,Types,Floating Point,Double,所以我的问题是 float a = 1.5 + 1.3; 完全可以,或者如果需要: float a = 1.5f + 1.3f; 有人告诉我,C编译器将不带f的浮点作为双精度浮点,这种情况可能导致某些地方的计算不精确 这是对的还是原来的方法就足够了 float a = 1.5 + 1.3; 可以,但通常会收到编译器警告,如 truncation from 'double' to 'float' 这不是一个小数目的问题 但是最好对float使用f后缀,对double使用无后缀,行float

所以我的问题是

float a = 1.5 + 1.3;
完全可以,或者如果需要:

float a = 1.5f + 1.3f;
有人告诉我,C编译器将不带f的浮点作为双精度浮点,这种情况可能导致某些地方的计算不精确

这是对的还是原来的方法就足够了

float a = 1.5 + 1.3;
可以,但通常会收到编译器警告,如

truncation from 'double' to 'float'
这不是一个小数目的问题


但是最好对
float
使用f后缀,对
double
使用无后缀,行
float a=1.5+1.3相当于
浮点a=(浮点)(1.5+1.3),其中加法是
double
常量之间的
double
加法。(*)

a
中的最终结果与单精度常数之间的单精度加法基本相同。事实上,与精度更高的计算转换为浮点相比,单精度版本更可能不是最接近28/10的
float
。使用最佳可用精度进行计算并转换为
浮点
进行存储是IEEE 754标准化如此多精度的原因之一(映射到
浮点
双精度
,有时在C中映射到
长双精度


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

谢谢,这是一个完美的答案!对于编译时方程,不同意“最好将f后缀用于浮点”。这个答案的重点是消除截断警告,但通过执行类似于
float a=0.1f+6.0f/7.0f
v的操作,滑过精度损失<代码>0.1+6.0/7.0
在我的平台上给出的答案略有不同。
f
一开始不太准确。@chux on by platform我得到了同样的结果,但你肯定是对的。我将删除这个答案。我认为你关于编译器警告的答案很有用。原来的方法(sortof)可以工作,但是编译器会应用大量转换。从双精度到浮点值的转换可能会丢失有效数字。正如将数字转换为双精度一样,执行加法,然后将数字转换回浮点