C;想输出小数点后30位,但是后几位精度达不到,怎么回事?

long double a[360][180][38][19];

fscanf__s(fp,"lf"&a[0][0][0][0]);_

printf("a[%d][%d][%d][%d] = %31.30f\n",i,j,k,p,a[i][j][k][p]);

源数据:1.1111111111111111111111111111111
输出结果:1.11111111111111111111000000000

这是个什么情况?

double64位中,1位符号位,11位指数位,52位尾数位。
double尾数占52位,2^-52=2.2204460492503130808472633361816e-16,即2^-16,所以能够保证所有的15位精度。

数据的存储精度都是有限的,30位太长了,建议楼主以字符串的形式或者是整形数组的形式读入