【发布时间】:2023-02-22 00:14:29
【问题描述】:
许多程序员都知道 C 中有几种浮点类型。到目前为止,我知道 float、double 和 long double,但我不太确定它们是否全部,因为我找到了几个定义,如 @987654324 @.起初我以为这是 __FLT_MAX__ 的另一个名字,但当我尝试打印它时,我意识到它是不同的(如下所示):
#include <stdio.h>
void main(void)
{
__mingw_printf("flt value: %e, size: %d\n", __FLT_MAX__, sizeof(__FLT_MAX__));
__mingw_printf("dbl value: %e, size: %d\n", __DBL_MAX__, sizeof(__DBL_MAX__));
__mingw_printf("ldbl value: %e, size: %d\n", __LDBL_MAX__, sizeof(__LDBL_MAX__));
__mingw_printf("dec32 value: %e, size: %d\n", __DEC32_MAX__, sizeof(__DEC32_MAX__));
__mingw_printf("dec64 value: %e, size: %d\n", __DEC64_MAX__, sizeof(__DEC64_MAX__));
__mingw_printf("dec128 value: %e, size: %d\n", __DEC128_MAX__, sizeof(__DEC128_MAX__));
}
/* output:
flt value: 3.402823e+038, size: 4
dbl value: 1.797693e+308, size: 8
ldbl value: 3.237664e-317, size: 16
dec32 value: 9.944455e-315, size: 4
dec64 value: 9.089022e+269, size: 8
dec128 value: 3.237656e-317, size: 16
*/
什么是__十二月__*秒?
还有其他我不知道的浮点类型吗?
【问题讨论】:
-
标准 C 有您列出的三个:
float、double和long double。在某些系统上,double和long double可能相同。 -
顺便说一句,要打印
long double值,您应该使用格式说明符%Le。格式说明符和参数类型不匹配会导致未定义的行为.要打印size_t(这是sizeof的结果类型),您应该使用%zu。 -
说到
printf,你为什么使用非标准的__mingw_printf而不是标准的printf?与__FLT_MAX__等非标准常量类似,而不是标准的FLT_MAX?您使用哪些资源来学习 C?
标签: c types floating-point decimal