C 将时间常量编译为浮点数

C 将时间常量编译为浮点数,c,floating-point,compile-time-constant,C,Floating Point,Compile Time Constant,将带有双精度浮点值的文件转换为浮点值后,编译器(MSCV2005)会警告代码内常量从double转换为float,如 ... float r; r = (q1 + q2) * 0.5; ... 甚至q1、q2都是浮动0.5似乎被视为double 如何调整此行为,以便所有代码内常量都被视为floats?使用f后缀表示常量的类型为float: float q1 = ...; float q2 = ...; float r = (q1 + q2) * 0.5f; 标准(§6.4.4.2浮动常数)

将带有双精度浮点值的文件转换为浮点值后,编译器(MSCV2005)会警告代码内常量从
double
转换为
float
,如

...
float r;

r = (q1 + q2) * 0.5;
...
甚至
q1、q2
都是浮动
0.5
似乎被视为
double


如何调整此行为,以便所有代码内常量都被视为
float
s?

使用
f
后缀表示常量的类型为
float

float q1 = ...;
float q2 = ...;
float r = (q1 + q2) * 0.5f;
标准(§6.4.4.2浮动常数)规定:

非固定浮动常量的类型为
double
。如果以字母
f
f
作为后缀,则 键入
float
。如果后缀为字母
l
l
,则其类型为
long double


您问题中的常量没有后缀,因此类型为
double

使用
f
后缀表示常量的类型为
float

float q1 = ...;
float q2 = ...;
float r = (q1 + q2) * 0.5f;
标准(§6.4.4.2浮动常数)规定:

非固定浮动常量的类型为
double
。如果以字母
f
f
作为后缀,则 键入
float
。如果后缀为字母
l
l
,则其类型为
long double


您问题中的常量没有后缀,因此类型为
double

只需在常量后添加
f

float f = 0.5f;

只需在常量后添加
f

float f = 0.5f;
实际上是double而不是float,这是C中的“正常”浮点类型。像sin和log这样的函数将double作为参数,并返回double。浮点文本(如0.5)的类型为double,而不是float。因此,在计算中使用float而不是double需要一些努力:sinf,logf,0.5f。实际上,在C中,double而不是float是“正常”的浮点类型。sin和log等函数将double作为参数,并返回double。浮点文本(如0.5)的类型为double,而不是float。因此,在计算中使用float代替double需要一些努力:sinf、logf、0.5f。