#include <stdio.h>
#include <float.h>
int main () {
printf("storage size of long double %d \n", sizeof(long double));
printf("minimum long double positive value of %e \n", LDBL_MAX);
printf("maximum long double positive value of %e \n", LDBL_MIN);
printf("Precision value of %d", LDBL_DIG);
return 0;
}
这是输出
Success time: 0 memory: 2160 signal:0
storage size of long double 12
maximum long double positive value of -nan
minimum long double positive value of -0.000000e+00
Precision value of 18
float 4 byte 1.2E-38 to 3.4E+38 6 decimal places
double 8 byte 2.3E-308 to 1.7E+308 15 decimal places
long double 10 byte 3.4E-4932 to 1.1E+4932 19 decimal places
我为float
和double
获取了正确的值,但没有使用long double
;我做错了什么?
答案 0 :(得分:9)
您需要使用L
标记(%Le
)来表示您通过了long double
:
printf("minimum long double positive value of %Le \n", LDBL_MAX);
printf("maximum long double positive value of %Le \n", LDBL_MIN);
否则原始代码会从堆栈中获取long double
的一部分并将其解释为double
,这显然会变得一团糟。