十进制浮点数很好理解,就是我们日常所见的数字,比如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)。