计算机进行小数运算时出错的原因
问题
-
二进制数0.1,用十进制表示的话是多少?
0.5
-
用小数点后有3位的二进制数,能表示十进制数0.625吗?
能,0.101(2) = 0.625(10)
-
将小数分为符号、尾数、基数、指数4部分进行表现的形式称为什么?
浮点数
-
二进制数的基数是多少?
2
-
通过把0作为数值范围的中间值,从而在不使用符号位的情况下来表示负数的表示方法称为什么?
EXCESS系统表现
-
10101100.01010011这个二进制数,用十六进制数表示的话是多少?
AC.53
用二进制数表示小数
它的处理和整数是一样的,将各数位的数值和位权相乘的结果相加即可。
小数点后面的部分的位权依次是2-1、2-2、2-3、2-4...
计算机运算出错的现象:将0.1累加100次也得不到10
计算机运算出错的原因:有些十进制的小数无法用二进制数正确表示,这和十进制无法表示1/3这种循环小数是一样的道理。
浮点数
浮点数是指用符号、尾数、基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数,所以基数自然是2.因此,实际的数据中往往不考虑基数,只用符号、尾数、指数这三部分即可表示浮点数。
双精度浮点数用64位、单精度浮点数用32位来表示全体小数。
- 符号:符号位是1时表示负,符号位是0时表示正或零。
- 尾数:将小数点前面的值固定为1的正则表达式
- 指数:用EXCESS系统表示(为了表示负数时不使用符号位,通过将指数部分表示范围的中间值设为0)
如何避免计算机计算出错
计算机计算出错的原因之一是,采用浮点数来处理小数(另外,也有位溢出导致的计算出错)。
- 回避策略:即无视这些错误。根据程序目的的不同,有时候一些微小的偏差并不会造成什么问题。
- 把小数转换成整数来计算。
- BCD(Binary Coded Decimal):用4位二进制来表示0~9的1位十进制数字
二进制与十六进制
4位二进制数正好相当于1位十六进制数。
用十六进制数来表示二进制小数时,小数点后的二进制数的4位也同样相当于十六进制数的1位。不够4位时用0填补二进制数的低位即可。