poj1191 棋盘覆盖用到了这种数据类型

我们暂且不说这道题:本文主要讨论long double 的使用。

一、看一下double的使用,double 只能精确到小数点后  15位

    //a的实际大小为: 3. 1415926535 8979323846 2643383279 5028841971


double a;
a=(double)acos(-1);
//cout<<a<<endl;
printf("%.16lf\n",a);


二、long double  据说精确到20位


但在windows下测试出来精度和double一样
       gcc -std=c99 Ldouble.c -o L
    /*long double 的code*/ 


       gcc -std=c99 Ldouble.c -o L

    /*long double 的code*/   

long double a;
a=(long double)acos(-1);
printf("%.20Lf\n",a);

为什么呢?那是因为acos返回的是double。

三、那我们就直接赋值看能输出的精度是多少!

windows下测试的,精度达到20位以上

int main(){
long double a;
a = (long double) 2e-10;
a *= a;
//cout << a << endl;
printf("%.25Lf\n",a);
//输出:0.0000000000 0000000004 00000
return 0;
}