一、计算机小数运算错误示例:将0.1累加100次也得不到10
下图是将0.1累加100次,然后将结果输出到显示器上的C语言程序:
二、二进制表示小数
小数点前面部分的转换只需将各数位数值和位权相乘,然后再将相乘的结果相加即可;小数点后面的部分将各数位的数值和位权相乘的结果相加即可。(位权是用来与各数字位的数字相乘的数值)
下面是二进制小数转换成十进制数的方法:
三、计算机运算出错的原因
正如下图所示:
计算机这个功能有限的机器设备,是无法处理无限循环的小数的。因此,在遇到循环小数时,计算机就会根据变量数据类型所对应的长度将数值从中间截断或四舍五入。
四、浮点数:(浮点数是指用符号、尾数、基数和指数这四部分来表示的小数)
表示小数的两种数据类型分别为双精度浮点数和单精度浮点数。其中,双精度浮点数类型用64位、单精度浮点数类型用32位来表示全体小数。
浮点数的表现形式:(由符号、尾数、基数、指数四部分构成)
双精度浮点数和单精度浮点数:
(一)双精度浮点数能够表示的正数范围是4.94065645841247×10~
1.79769313486232×10,负数范围是-1.79769313486232×10~~
-4.94065645841247×10。单精度浮点数能够表示的正数范围是
1.401298×10“~3.402823×10°,负数范围是-3.402823×10°~-1.401298×10”。不过,正如正文中所介绍的那样,在这些范围中,有些数值是无法正确表示的。
(二)像0.12345×10°和0.12345×10“这样使用与实际小数点位置不同的书写方法
来表示小数的形式称为浮点数。与浮点数相对的是定点数,使用定点数表示小数时,小数点的实际位置固定不变。例如,0.12345×10和0.12345×10用定点数来表示的话即为123.45和0.012345。
浮点数可以用不同的形式来表现同一个数值,例如:
五、避免计算机计算出错
首先是回避策略,即无视这些错误。根据程序目的的不同,有时一些微小的偏差并不会造成什么问题。一般来讲,在科学技术计算领域,计算机的计算结果只要能得到近似值就足够了。那些微小的误关完全可以忽略掉。
另一个策略是把小数转换成整数来计算。计算机在进行小数计算时可能会出错,但进行整数计算(只要不超过可处理的数值范围)时一定不会出现问题。因此,进行小数的计算时可以暂时使用整数,然后再把计算结果用小数表示出来即可。
将小数替换成整数来计算的C语言程序: