浮点数的表示
完整的浮点数表示包括以下几点:
符号(S):1位二进制位,0表示正数,1表示负数。阶码部分(E):根据不同的精度E的位数不同(参照下图float与double的区别),表示小数点向右移动的位数。E>0 表示向右移动,E<0表示向左移动。
尾数部分(M):根据不同的精度M的位数不同参照下图float与double的区别),是浮点数的二进制表示。需要注意的是这里尾数部分为 1.M... ,所以遇到类似0.125这样的小数,其二进制表示为 0.1001111... ,这时就需要将小数点右移1位才符合要求。
浮点数的精度:在像C/C++这样的语言中,浮点数有float,double类型,他们的精度是不一致的。
float类型:使用32位表示,1位符号,8位阶码(阶码包含一位符号位),23位尾数(无符号位)。阶码的范围: 使用移码表示,偏置取127,表示数的范围为[-126,127](由IEEE 754标准规定,见下文)。尾数范围: 实际应当用24位表示,但由于第一位必须为1,则采用23位表示(节省了一位来提高精度),[0,2^23=8388608]
Double类型:使用64位表示,1位符号,11位阶码(阶码包含一位符号位),52位尾数(无符号位)。阶码的范围: 与float类型一样,使用移码表示,偏置取127,表示数的范围为[-1022,1023]。尾数范围: 实际应当用53位表示,但由于第一位必须为1,则采用52位表示(节省了一位来提高精度)
浮点数的二进制表示:10进制浮点数转换为二进制表示很简单,分2个部分讨论。整数部分:采用除2取余法计算(直到被除数为0);小数部分:采用乘2取整法计算(直到小数部分为0,对于无限小数采取截断方式)。最后用整数二进制表示.小数二进制表示就可以得到完整的浮点数二进制表示了。
等你上了中学,就会学到 “科学记数法”。
任意数字 N,按照科学记数法即为:N = ± 绝对值 × 10^e。
式中的绝对值,是 “一位整数、多位小数”。
式中的 e,是以 10 为底的指数。
如:N =-98765.4321,就可写成:N =-9.87654321 × 10^4。
把科学记数法,加一些改动和限制,再存到计算机中,就成了 “浮点数”。
一个浮点数,由三部分组成:S、E 和 M,它们都是二进制数。