C语言中的菜鸟问题.可惜我不知道.知道的说下.

.额,我写了以下程序段:
#define qunimade 3.61
main()
{
float _9u, u9_;
_9u=1.234e1; u9_=_9u*qunimade;
printf("ni jiu shi niao = %f",u9_);
}

结果应该是44.5474 可编译系统的结果是44.547401
后面的01是哪来的???
(编译系统是TC)
.额,系统误差?
实型数据中 系统会分配4Byes给float.(单精度float有效位应为6-7位.float与double的区别在于 显示的有效位数与指数部分显示范围的不同而已.) 1.234e1是实型常量的指数形式,可以用以float嘛.难道是因为float显示的有效位数不够,才说要用double?
.照你们说的,是不是说 32位的float中,有效数给24位,指数给8位.那要输怎样的数才不会有这后面多余的部分呢?

float只有6位有效数字.
原因是计算机中数据是2进制存储的,而且浮点数还有单独的存储格式,44.5474转成二进制时不可能恰好转成一个有限位数的二进制数,就算能,位数可能也超过了浮点数存储格式中允许的位数.因此44.5474在计算机中存储的其实并不是44.5474,而是一个和它很接近的数,这个数和它的误差一般在小数后5,6位左右出现,所以一般来说float有效数字只有6位.
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-25
系统自动产生,因为C语言系统的默认有效数据是8位
编程时可以利用一些语句控制有效数字个数
第2个回答  2008-09-25
1.234e1的值是double型的,6个小数
把float _9u,u9_;改为:double _9u,u9_;
结果就对了。
第3个回答  2008-09-25
后面的很小的数字是由于机器电气等方面的原因导致的误差,属于不可控的正常现象。
第4个回答  2008-09-26
应该是float这里出的问题
相似回答