浮点数float和double的精度

本文深入解析了计算机中浮点数的表示方式,包括科学计数法、补码、阶码与尾数的概念,并通过具体实例展示了浮点数在不同精度条件下的表示范围与最大值。此外,文章还对比了C语言中float和double类型的数据表示能力,揭示了它们在精度和范围上的差异。最后,讨论了浮点数加减法运算的局限性,强调了浮点数处理过程中的对阶问题。
摘要由CSDN通过智能技术生成
浮点数的实质是科学计数法,其规定为:尾数是纯小数。
计算机浮点数科学计数法:z = x * 2^y
x为尾数,y为阶码;
x是定点数,且小数点在首部,y是定点数,且小数点在尾部;
x的高一位是符号位,小数点,在高一位和高二位之间,且是补码;y的高一位是符号位,小数点在末位后面;




在计算机中,阶码被放在尾数的前面:
设有八位浮点(3.5):阶码为3位补码,尾数为5位定点纯小数
eg:(1101 0011)浮(3.5)
y  = (110)补 = (110)原 = (110)2 = -2
x  = (1.0011)补 = (1.1101)原 = -(0.1101)2 = -13 * 2^(-4)
z = x * 2^y = -13 * 2^(-4) * 2^(-2)  = -13/64


已知:c语言中float类型是浮点数,且其有效位数(精度)为7位十进制,求其表达数值的范围?


解:x是有效位数的表达部分,由于x是二进制纯小数,且为补码:
设:有尾数:(0.0*******01)(一共m位,*号为省略号,为了区分小数点)
= (0.0****01)2 // 2代表二进制
= 2 ^-(m-1) = 10^(-t) // 10^(-t)代表用十进制表示的精度为t位
t = (m-1)lg2 lg2 ≈ 0.3 // 后面就用0.3代替
t = 7 => m  ≈ 24
又知float为4字节类型,即32位浮点,则阶码为8位,最高位为符号位,其所能表达的最大正整数为:2^7,即y = 2^7,而x的最大值约为1(0.11***1)<23个1>,所以z = x * 2^y = 2^128 
设能表达的取值范围用十进制表达为10^h,则 2^128 = 10^h,解得h约为38,所以float类型所能表达的最大十进制数为10^38






已知:c语言中double类型数据可表达10^308范围的数值,求其精度(有效位数)


解:当尾数约等于1,阶码为最大整数时,可表示最大数值
此时 z = 1 * 2 ^y = 10^308
y ≈ 1027
设:阶码有t位,则 2^(t-1) = y = 1027(最高位为符号位) t ≈ 11,所以阶码为11位,
double共8字节,即64位,尾数有53位,且为定点纯小数补码,其能表达的最精确数的形式为:(00...01)补,(53位) = (0.0***01)2 = 2^(-52) = 10 ^h
h ≈ 15,即double有效位数为15位


定点数由于固定小数尾数,因此不便表示数值,或者表达范围受限,或者表达精度受限,但其优点在于加减法运算方便;
浮点数用科学计数法表示以后,可以同时满足精度和范围的双重要求,但对于加减法运算存在对阶问题;
对阶问题:如要计算 0.24 * 10^14 + 0.24 * 10^(-14)
必须要先转变为:0.24 * 10^14 + 0.0000000000000024 * 10^14
结论:浮点数加减法速度不如乘除法快。























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值