C 将时间常量编译为浮点数
将带有双精度浮点值的文件转换为浮点值后,编译器(MSCV2005)会警告代码内常量从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浮动常数)
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。