浮点数计算方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3.4二进制转10进制及10进制转为二进制
【例2-3-4】
把二进制110.11转换成十进制数,及十进制转为二进制。
解:
(110.11)2 =1×22+1×21+1×20+1×2-1+1×2-2
=4+2+0+0.5+0.25=(6.75)10
把十进制转换为二进制
解:
2 6 0
2 3 1
1 1
所以实数部分为110
0.75×(2×2-1)=0.75×2×2-1
=1×2-1+0.5×2-1
=1×2-1+1×2-2
所以结果为:(110.11)2
2.3.5 浮点数在计算机中存储形式
当前主流微机中广泛采用的IEEE754标准浮点格式。
按IEEE754标准,常用的浮点数(32位短实数)的格式如图2-3所示。
IEEE754标准浮点格式
N=2e.M (M为浮点尾数,为纯小数,e为浮点数的指数(阶码))尾数部分决定了浮点数的精度,阶码决定了表示范围32为浮点数(IEEE754标准格式0—22为尾数M,23-30为阶码E,31为符号位S),阶码用移码表示。阶码E=指数真值e+127 规格化真值x=(-1)^S*(1.M)*2^(E-127)
将(82.25)10 转换成短浮点数格式。
1)先将(82.25)10 转换成二进制数
(82.25)10 =(1010010.01)2
2)规格化二进制数(1010010.01)2
1010010.01=1.01001001×2 6
尾数M=01001001
3)计算移码表示的阶码=偏置值+阶码真值:
E=127+6=133=10000101
4)以短浮点数格式存储该数
因此:符号位=0 S=0表示该数为正数
阶码=10000101 由3)可得
尾数=01001001000000000000000 由2)可得;尾数为23位,
不足在后面添15位0 所以,短浮点数代码为:
0;10000101;01001001000000000000000
表示为十六进制代码为:42A48000H
IEEE754有3种浮点表示格式,分别称为:短浮点数(或称短实数(Single,Float))、长浮点数(或称长实数(Double))、临时浮点数(或称临时实数(延伸双精确度,不常用))。它们的具体格式如表2-4所示。
表2-4 IEEE754的3种浮点表示格式
【例2-3-5】
#include"stdio.h"
main()
{
float a=22.2;
float b=51.44;
printf("a=%f,b=%f",a,b);
char v; /*定义一个字符型的变量,用来防止程序太短运行闪一下就没了*/ v=getchar(); //从屏幕上接收字符
}
运行结果如图2-3-5
运行如图2-3-5
22.2的二进制为:10110.00110011001100110011001100110011(为无限循环小数,以0011为循环块)
IEEE754代码为:0(符号位一位);
10000011(阶码八位);
(尾数23位)01100011001100110011001(23位结束);
余下位数1001100110011
因为在进行浮点数操作时会有四舍五入的操作
结果所以IEEE754代码应该为:0;10000011;01100011001100110011010
=22.200000762939453125
取值时按四舍五入只截取后6位小数于是值为22.200001
同理51.44的二进制为:110011.0111000010100011110101110000101(为无限循环小数,)IEEE754代码为:0(符号位一位);
10000100(阶码八位);
(尾数23位)10011011100001010001111(23位结束);
余下位数0101110000101
因为在进行浮点数操作时会有四舍五入的操作
结果所以IEEE754代码应该值不变:0;10000100;10011011100001010001111 =51.439998626708984375
取值时按四舍五入只截取后6位小数于是值为51.439999
Welcome To Download !!!
欢迎您的下载,资料仅供参考!