如果写小数点,还需要字母“f”吗?

Gui*_*lle 6 c floating-point constants preprocessor-directive xc16

下面两行代码有什么区别?

#define F_SAMP 10000.0f

#define F_SAMP 10000.0

两个不都浮起来吗?(顺便说一句,在这种特殊情况下,编译器是 XC16,但我认为这并不重要)感谢您的关注

chu*_*ica 5

如果写小数点,还需要字母“f”吗?

f没有必要,但最好将-less 常量与double变量/数学一起使用,并将f后缀常量与float1 一起使用。

两个不都浮起来吗?

两者都有浮点数
floatdouble是不同的。

类型差异

附加一个f使浮点常量类型float而不是double.

_Generic这可以使用和<tgmath.h>以及浮点表达式中使用的数学来引导不同的代码。

考虑到通常的范围和精度差异,会出现微妙的甚至有时不那么微妙的差异。

价值差异

告诉f编译器使用通常较窄的范围和精度float
例如0.1 != 0.1f

有时它也会产生价值差异,即使分配给一个float.


Eri*_*hil 5

forF后缀的浮点常量为 type float,不带后缀的浮点常量为 type double,带lorL后缀的浮点常量为 type long double

首先,这会产生影响,因为该值可能不同,并且如果该值不是整数,通常也会不同。例如,使用float和最常用的格式double, 的值为123456789.123,456,789,但 的值为123456789.f123,456,792。

此外,如果将该值分配给 a float,则结果可能与f最初使用常量时不同。例如,之后:

float f0 = 9007198986305535.5f;
float f1 = 9007198986305535.5;
Run Code Online (Sandbox Code Playgroud)

的值为f09,007,198,717,870,080,但 的值为f19,007,199,254,740,992。这是因为前轮9,007,198,986,305,535.5直接到float,而后轮先到double再到float


dbu*_*ush 4

后缀f使常量10000.0f具有类型float

该常量的10000.0类型为double