sherlock_t 2016-11-18 13:40 采纳率: 0%
浏览 2470

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

这是个什么情况?

  • 写回答

2条回答 默认 最新

  • MMomega 2016-11-18 14:15
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码