计算机中的小数运算

1.用二进制表示小数

        我们在编程语言中将0.1累加100次,可以确定的是结果肯定不是10。但这并不是计算机出现了故障,而是由计算机用二进制表示小数的机制所造成的。下图所示为将二进制数1011.0011转换为10进制数的过程。

        整数部分二进制的转换我们已经了解了,从上面我们可以看到,小数部分的二进制转换也和整数类似,也是数位与位权乘积,而从小数点开始往后位权中的幂变成负的了,但是规则不变。

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

        如下图所示为各个二进制小数与十进制数的转换,由图中可以看到,由于二进制只有0和1,所以其所能表示的十进制小数是有限的,并不能表示任意小数。

3.小数在计算机内部的表现形式

        像用1011.0011 这种方式表示的小数并不是计算机内部表示小数的方式,小数在计算机内部的具体表现形式我们一一来介绍。在具体介绍之前,我们先来了解一些概念。

        我们知道很多编程语言中都有两种表示小数的数据类型,double(双精度浮点数类型)以及float(单精度浮点数类型),它们都是采用浮点数来表示小数。而浮点数是指用符号、尾数、基数以及指数这四部分来表示的小数,如下图所示。

         对于二进制计算机来说,基数肯定为2,所以一般浮点数通常是用符号、尾数和指数这三部分来表示。浮点数的具体内部构造如下:

         符号部分正数为0,负数为1,尾数部分采用正则表达式,所谓正则表达式就是将小数点前面的值固定为1的正则表达式,具体方法如下图:

        上图为单精度浮点数的尾数是如何用正则表达式表示的过程。而对于指数部分则采用EXCESS系统,EXCESS系统的存在就是避免在二进制中用负数表示指数部分,其具体系统表现如下:

         我们从编程语言上输入的十进制0.75在计算机中的存储形式为0-01111110-10000000000000000000000,三个部分分别表示符号、指数以及尾数。符号0表示为正数,指数01111110为十进制126,用EXCESS系统转换就是126-127=-1,而尾数部分实际表示的是1.10000000000000000000000这个二进制数,尾数的十进制为1.5,最终表示的是1.5x2^(-1)=0.75。

4.避免出错

        在针对计算机进行小数运算会报错的情况,主要由两种措施来避免。

        1.回避策略。即忽视这些错误,因为这些错误的存在可能并不会对计算结果造成偏差,计算机的计算结果只要能得到近似值就足够了。

        2.将小数换成整数来计算。将0.1扩大10倍,可以先将1相加100次,然后对最后的结果除以10就可以了。

5.二进制与十六进制的转换

        十六进制在编程语言中通常会在前面加上0x,二进制与十六进制的转换原则就是二进制的4位相当于十六进制的1位。转换过程如下:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值