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

看完第三章后,我知道计算机进行小数运算时出错的原因,是在于,有一些十进制的小数无法转换成二进制数,只能得到近似值。

在这一章,我知道小数是用浮点数来表示的。

浮点数是指用符号、尾数、基数和指数四部分来表示小数,由于计算机使用的是二进制数,所以基数为2,所以可以将其省略,只需三部分组成,即符号 指数 尾数。由于表示小数的数据类型不同(数据类型有两种,单精度和双精度),所以位数也不同。单精度浮点数为32位,其二进制表示为:符号部分(1位) 指数部分(8位) 尾数部分(23位);双精度浮点数为64位,其二进制表示为:符号部分(1位) 指数部分(11位) 尾数部分(52位)。而指数部分是用"EXCESS系统表现"来表示,尾数部分则是用“正则表达式”来表示。

EXCESS系统表现是指通过将指数部分表示范围的中间值作为0,使得负数不需要用符号来表示。0左边表示负数,0右边表示正数,而单精度指数部分是8位,最大值是255,取中间为127(小数部分舍弃);双精度指数部分为11位,最大值为2047,取中间为1023(小数部分舍弃)。

正则表达式是指可以讲表现形式多样的浮点数统一为一种表现形式,十进制的浮点数需遵循“小数点前面是0,小数点后面第一位不能是0”,二进制中需遵循“将小数点前面的值为1的正则表达式。”具体来说就是将化为二进制的小数左移或右移数次后,整数部分的第一位变为1,第二位之后都变为0,而第一位的1在实际数据中不保存(因为它可以省略,所以实际上可以表示为24位的数值)。例如-12.75,12.75转化成二进制为00001100.11,小数点往左移3位,即00001.10011,用单精度浮点数表示为符号位是1(负数),指数部分是127+3,二进制表示为10000010(8位),尾数部分是10011000000000000000000(23位),最终得1 10000010 10011000000000000000000。

还有就是如何避免计算机计算出错,第一 回避这些错误(可能出错,根据程序编写目的不同);第二,把小数转换成整数来计算,即0.1可以表示为1/10(一定不会出错)。还有二进制数与十六进制数,如果位数太多,用二进制表示太麻烦,所以采用十六进制来代替二进制(即在数值前面加上0X)。二进制的4位相当于十六进制的1位。整数部分从右至左划分,不够四位,需将最前面补0,小数部分从左至右划分,不够四位需将最后面补0。

这些是我从这一章学到的。

原文地址:https://www.cnblogs.com/by123-/p/10321038.html