以上例子是一个“小数由十进制转换到二进制时可以算到‘余下的小数为0’为止”的小数。
但对于“小数由十进制转换到二进制时只能算到‘满足精度要求’为止”的小数,采用这种方法将二进制小数转换成十进制小数,则所计算出的结果会与实际的十进制小数之间产生误差。但若之前所取的精度越高(即二进制小数位数越多),则该误差就会越小。
比如:0.734就是一个“只能算到‘满足精度要求’为止”的小数。
首先,我们将0.734转换成二进制,过程如下:
0.734×2=1.468……1
0.468×2=0.936……0
0.936×2=1.872……1
0.872×2=1.744……1
0.744×2=1.488……1
0.488×2=0.976……0
……
显然,不管乘以多少次2,所得的乘积的小数部分都不可能为0,所以只能取一定精度。现假设,精度就是6位有效二进制数,那么,顺序取值而所得的0.734的二进制就是0.101110。
然后,我们再用上面的方法将二进制小数转换回十进制小数,具体过程如下:
显然,根据上面的方法所计算的结果要比实际结果0.734小,但也已经很接近0.734了。如果前面所取的精度再高一些、位数再多一些,那么所计算的结果将会更接近0.734。
这也就是为什么前面会说“有误差”的原因了。