概述
不通过某种编码,计算机中无法直接存储手写的小数形式的实数–110110.101或规范化的指数形式的实数–1.10110101×2101。小数点前面只有一位非0的整数,就是规范化的指数形式表示的实数;在二进制中,小数点左边的这个非零整数只能是1。
在计算机中,对实数的编码(比如以下所讲的余127码)是以对二进制的规范化的指数形式为基础来进行的。其编码方式是:省略掉规范化的指数形式中的一位整数部分“1”、小数点“.”、乘号“×”、基数2,只保留数的符号(用0表示正数、1表示负数)、尾数(即实数的小数部分)和指数部分。这就必须规定在位串中这三者的位置和各自所占的字节数。
比如,对于–1.10110101×2101这个数,只需存储符号位(负号)、尾数位10110101和指数位101。
此外,指数部分还要变换。因为在计算机中,IEEE(电气和电子工程师协会)745标准规定:用长度为8位的余127码(而不是用补码)来表示(可正可负的)指数部分。
在计算机中通常规定:从左到右采用“符号位(1位)+指数位(8位的‘移码’或称为余127码)+尾数位(23位)”的方式(一共占据4个字节)来表示和存储一个二进制的单精度实数(又称为单精度浮点数)。
这是由IEEE 745标准规定的一种二进制实型数表示法,精度是十进制的6位(见Behrouz Forouzan等著,刘艺等译《计算机科学导论》,机械工业出版社出版)。大多数计算机制造商都支持这种IEEE 745标准。
【例题3.4】求一个十进制数–41.75的余127码的实数表示法。
1)符号为负,所以最左边符号位S=1(如果是正数,符号位用0表示)。
2)十进制转换为二进制 41.75=(110011.11)2。其中,整数和小数部分分别转换。
3)规范化:(110011.11)2=(1.1001111×2201)(即移动小数点)。
4)指数位的余127码为 E=101+1111111=(10000100)2(即5+127=132)。
5)尾数位为 M=(1001111)2。
6)最终得到:
1 10000100 10011110000000000000000
↑ ↑ ↑
符号位(S) 指数位(E 8位) 尾数位(M 23位)
延伸与拓展:
单精度浮点数的取值范围
由上可知,能够表示的最大正数用余127码表示是:
0 11111111 11111111111111111111111
=2(11111111–1111111)×1.11111111111111111111111=2128×1.11111111111111111111111
=2105×111111111111111111111111≈3.4×
能够表示的最小正数用余127码表示是:
0 00000000 00000000000000000000001
=2–127×1.00000000000000000000001≈1.17×10–38
对于负数情况完全是类似的,绝对值最大的负数是–3.4×,绝对值最小的负数是–1.17×10–38。
单精度浮点数的精度
浮点数的精度取决于它的规范化表示法的尾数部分,与指数位无关。指数位仅决定小数点的位置。尾数部分的位数越多,能够表示的有效数字就越多,精度就越高。
在IEEE 745标准中,单精度浮点数的尾数用23位存储,加上默认的小数点前的1个整数位(该位的值是1)。用24位二进制能够表示的最大十进制正整数是224–1=16777215,所以单精度的浮点型数的精度是十进制的7位。也就是说,只有十进制数值的高7位是准确无误的(严格来说,如果一个十进制数的高8位小于等于16777215,那么这个数的高8位都是准确无误的,否则精度只有7位)。
实数值0.0规定用余127码的全0来表示。
用以上转换方法,规范化指数表示法的0无法用余127码来表示,因为它没有一位非零的整数部分。因此,IEEE 745标准特别规定:用余127码的全0来表示数值0,即0 00000000 000000000000000000000。
最后
以上就是健康外套为你收集整理的计算机中浮点数的表示的全部内容,希望文章能够帮你解决计算机中浮点数的表示所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复