一.计算机进行小数运算时出错的原因
1.用二进制数表示小数
二进制数小数点前面部分的位权,第 1位是2的0次幂、第2位是2的1次幂····以此类推。 小数点后面部分的位权,第1位是2的-1次幂、第2位是2的-2次幂,以此类推。 0次幂前面的位的位权按照1次幂、2次幂··的方式递增, 0次幂以后的位的位权按照-1次幂、-2次幂···的方式递减。 这一规律并不仅限于二进制数,在十进制数和十六进制数中也同样适用。 既然二进制数的小数点后第3位是2的-3次幂(0.125), 第4位是2的-4次幂(0.0625), 那么小数点以后的。0011转换成十进制数就应该是0. 125+0.0625=0.1875。此外,由于整数部分的1011转换成十进制数是11。因此, 二进制数1011.0011转换成十进制数就是11+ 0.1875=11.1875。
2.计算机运算出错的原因
因为无法正确表示的数值, 最后都变成了近似值。计算机这个功能有限的机器设备, 是无法处理无限循环的小数的。因此,在遇到循环小数时, 计算机就会根据变量数据类型所对应的长度将数值从中间截断或者四舍五人。我们知道,将 0.3333··这样的循环小数从中间截断会变成0.333333, 这时它的3倍是无法得出1的(结果是0.999999),计算机运算出错的原因也是同样的道理。
3.什么是浮点数
很多编程语言中都提供了两种表示小数的数据类型, 分别是双精度浮点数和单精度浮点数。 双精度浮点数类型用 64位、单精度浮点数类型用32位来表示全体小数。在 C语言中,双精度浮数类型和单精度浮点数类型分别用double和float来表示。 不过,这些数据类型都采用浮点数来表示小数。那么, 浮点数究竟采用怎样的方式来表示小数呢?接下来就让我们一起来看一下。浮点数是指用符号、尾数、 基数和指数这四部分来表示的小数。因为计算机内部使用的是二进制数, 所以基数自然就是2。因此,实际的数据中往往不考虑基数, 只用符号、尾数、指数这三部分即可表示浮点数。也就是说, 64位(双精度浮点数)和32位(单精度浮点数)的数据,会被分为三部分来使用 。
4.二进制数和十六进制数
最后再补充说明一下二进制数和十六进制数的关系 。在以位为单位表示数据时,使用二进制数很方便, 但如果位数太多,看起来就比较麻烦。因此,在实际程序中, 也经常会用十六进制数来代替二进制数。在C语言程序中,只需在数值的开头加上 0x (0和x)就可以表示十六进制数。二进制数的4位,正好相当于十六进制数的1 位。