Gui*_*lle 6 c floating-point constants preprocessor-directive xc16
下面两行代码有什么区别?
#define F_SAMP 10000.0f
#define F_SAMP 10000.0
两个不都浮起来吗?(顺便说一句,在这种特殊情况下,编译器是 XC16,但我认为这并不重要)感谢您的关注
如果写小数点,还需要字母“f”吗?
f没有必要,但最好将-less 常量与double变量/数学一起使用,并将f后缀常量与float1 一起使用。
两个不都浮起来吗?
两者都有浮点数。
但float和double是不同的。
类型差异
附加一个f使浮点常量类型float而不是double.
_Generic这可以使用和<tgmath.h>以及浮点表达式中使用的数学来引导不同的代码。
考虑到通常的范围和精度差异,会出现微妙的甚至有时不那么微妙的差异。
价值差异
告诉f编译器使用通常较窄的范围和精度float。
例如0.1 != 0.1f。
有时它也会产生价值差异,即使分配给一个float.
带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。