Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8030
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 42
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-21 15:16
个人简介

学习不止步

文章分类
文章存档

2013年(3)

我的朋友

分类: C/C++

2013-07-21 16:31:07

int i = 100;
float j = 0.1;
float s = i+j;
printf("%f %f ", s, i+j);
编程的时候两个输出为什么不同

浮点数存储在内存当中是按照
IEEE(电气和电子工程师协会)754浮点存储格式标准来存储的,float型为1位符号,8位指数,23为尾数,double型为1位符号,11位指数,52位尾数。
十进制小数化为二进制数的时候是采用乘2取整的方法,结果当j = 0.1被存入内存的时候,化成的二进制数的尾数大于23位,所以就使得i的值产生了误差,因此s = i+j也会差生误差;但是之所以不同输出结果的原因,我认为是因为输出结果小数点后面只是保留了6位,所以i+j的误差被截断了(即i+j也是有误差的),而s因为存进内存的时候又产生了更大的误差>0.0000001,所以没有被截断而显示了出来。
阅读(943) | 评论(0) | 转发(0) |
0

上一篇:今天开始写

下一篇:没有了

给主人留下些什么吧!~~