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) |