计算机进行小数运算时出错的原因

问题

  1. 二进制数0.1,用十进制表示的话是多少?

    0.5

  2. 用小数点后有3位的二进制数,能表示十进制数0.625吗?

    能,0.101(2) = 0.625(10)

  3. 将小数分为符号、尾数、基数、指数4部分进行表现的形式称为什么?

    浮点数

  4. 二进制数的基数是多少?

    2

  5. 通过把0作为数值范围的中间值,从而在不使用符号位的情况下来表示负数的表示方法称为什么?

    EXCESS系统表现

  6. 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填补二进制数的低位即可。

原文地址:https://www.cnblogs.com/fr-ruiyang/p/14544395.html