为什么十进制浮点数常常无法用二进制精确表示?

       十进制浮点数很好理解,就是我们日常所见的数字,比如3.3,2.56等数字,都是十进制的。那么,二进制小数该如何表示呢?

       首先,我们先看下整数,对于十进制整数10,用二进制表示就是1010=1*2^3+0*2^2+1*2^1+0*2^0,所以对于整数,十进制和二进制之间的转化还是挺直接的。那么对于小数,该如何转化呢?

       比如,对于3.3,如何转化为二进制表示?对此我们首先应该理解3.3是什么意思,很显然,3.3=3+0.3,关键在于0.3如何理解。在十进制中,0.3的意思就是十份中的3份,0.33就是100份中的33份,我们平常很自然的在脑海里就形成了这种意识,这种意识的关键之处就在于,对于十进制中的小数点后一位小数,其最多为10份,两位小数最多为100份,3位为1000份...所以,对于二进制,同样的,要表示0.3,我们需要先表示出10所需要的位数,然后再取其中的3份即可。但是有一个问题是,在二进制中,小数点后,一位小数最多为2,两位最多为4,3位为8,n位为2^n...所以是始终无法为10的,又因为3/10是无法约分的,所以我们实际上在二进制中,无法精确表示十进制数3.3。通过前述,我们知道,十进制浮点数常常无法用二进制精确表示的原因就在于10^n和2^m之间没有一个整数n,m之间的对应关系。从而我们可以推论,8进制浮点数一定可以用二进制浮点数精确表示,因为8^n总是可以用2^3n来转换。

       但是,十进制小数中,比如3.5,由于0.5=5/10=1/2,可以约分到2^1,从而这时便可以用二进制准确表示,这时3.5的二进制浮点数表示11.1=1*2^1+1*2^0+1/(2^1)=1*2^1+1*2^0+1*2^(-1)。同理,由于0.25=25/100=1/4,故5.25=101.01=1*2^2+0*2^1+1*2^1+(0*2^1+1*2^0)/2^2=1*2^2+0*2^1+1*2^1+0*2^(-1)+1*2^(-2)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值