1、实型数据的舍入误差
实型变量占据有限的存储单元,所以它能提供的有效数字也是有限的。在有效位以外的数字将被舍去,因此就会产生一些误差,如下例:
# include <stdio.h>
void main(){
float x;
x = 1.23456789;
printf("x=%f",x);
}
运行结果为:x=1.234568
这是由于x为单精度浮点数,只能提供7位有效数字,因此后面的几位被舍弃了。
2、按双精度处理实数
由于单精度(float)型数据只能提供7位有效数字(第7位还不是完全准确地),因此为了提高数据的精度,可以将变量定义为双精度类型,用8个字节存储数据,得到15~16位有效数字。
在上面的例子中 x=1.23456789,在程序编译时,编译系统会发出警告:“truncation from 'const double' to 'float'”,即“将一个double常数转换成float”,提醒用户可能会损失一些精度,但这不是致命的,程序可以接着进行连接和运行,按单精度(float)存放数据并得到相应的结果。