以下 2 行代码有什么区别?
#define F_SAMP 10000.0f
#define F_SAMP 10000.0
两个都不是浮动的吗?(顺便说一句,在这种特殊情况下,编译器是 XC16,但我认为这并不重要)感谢您的关注
以下 2 行代码有什么区别?
#define F_SAMP 10000.0f
#define F_SAMP 10000.0
两个都不是浮动的吗?(顺便说一句,在这种特殊情况下,编译器是 XC16,但我认为这并不重要)感谢您的关注
f带orF后缀的浮点常量有 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;
的值为f09,007,198,717,870,080,但 的值为f19,007,199,254,740,992。这是因为前几轮 9,007,198,986,305,535.5 直接到float,而后几轮先到double再到float。
如果写小数点,字母“f”是否必要?
没有必要,但最好使用带有变量/数学的f-less 常量和带有后缀的常量。doubleffloat
两个都不是浮动的吗?
两者都有浮点数。
但是float和double不一样。
类型差异
附加一个fmake 浮点常量类型float而不是double.
这可以引导到不同的代码_Generic以及<tgmath.h>浮点表达式中使用的数学。
鉴于通常的范围和精度差异,会出现细微的、有时不是那么细微的差异。
价值差异
告诉编译器f使用 a 通常更窄的范围和精度float。
例如0.1 != 0.1f。
有时它也会产生价值差异,即使分配给float.
f后缀使常量具有10000.0f类型float。
常量10000.0有类型double。
我不是 100% 确定 XC16,但通常省略尾随f会导致编译器将您的浮点数解释为double. 这f是专门告诉编译器它正在查看一个float.
f带有orF后缀的浮点常量的类型为float。
没有后缀的浮点常量是类型double。
l后缀为or的浮点常量L为 类型long double。
这是三种不同的浮点类型。(根据实现,它们可能具有也可能不具有三种不同的表示形式。例如,具有相同大小和表示形式并不少见double。long double)
在10000.0vs.的特定情况下10000.0f,它可能没有太大区别。像 10000.0 这样的小整数值通常可以在所有三种浮点类型中精确表示,因此任何隐式或显式转换都不会丢失任何信息。但是使用与将要使用的上下文相匹配的类型仍然是一个好主意。
请注意,如果省略小数点,10000则为整数常量(类型为int),并且10000f是语法错误。带或不带后缀的浮点上下文必须有小数点或指数。
这是一组比整数常量更简单的规则,其中有更多不同的类型、更多后缀,并且常量的类型可以取决于它的值。