c编程,没有得到long double的正确值

时间:2016-04-27 11:38:47

标签: c

#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        

我为floatdouble获取了正确的值,但没有使用long double;我做错了什么?

1 个答案:

答案 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,这显然会变得一团糟。