解说float取值范围计算过程

1、先给出实型变量取值范围

实型变量可以分为单精度(float)(4字节)、双精度(double)(8字节)、长双精度(long double)(8字节)三种类型。

在 VC6.0 double和long double型具有完全相同的长度和存储格式,它们是等同的,但其它编译器可能不同。

下面给出实型变量取值范围:

bb97696f59156c439059671dd18d8d9e.png

2、实型变量在C语言内存中的存放形式

首先在讨论这个问题之前,先给出实型变量在C语言内存中的存放形式:

在存储实型数据时,无论表示是小数还是指数,均以指数格式存储,即实数的存储由符号位、指数、以及尾数等三部分组成。

下面我就将标准值是怎么定义的,和你说一下:

这个比较复杂,建议你找一下IEEE754标准看一下。

5db16e4d35a5e7a1afb764f7477b4c82.png
其中,s 表示 sign,即符号。如果 s == 0,则浮点数 V 为正;如果 s == 1,则浮点数 V 为负。

M 表示有效数字,在 [1, 2) 之间。

而 E 则是指数位。

故float存储的数字可以写成:

6b9d1b03ce41d1d76ae71e4a130f3d3b.png(1)Sign(1位):用来表示浮点数是正数还是负数,0表示正数,1表示负数。

(2)Exponent(8位):指数部分。即上文提到数字c,但是这里不是直接存储c,为了同时表示正负指数以及他们的大小顺序,这里实际存储的是c+127。

(3)Mantissa(23位):尾数部分。也就是上文中提到的数字b。

dc4f1dcaed14423722d86f459b23dadf.png
举个例子:计算float 13.14在C语言内存中存储情况

(1)首先整数用二进制表示为1101

(2)0.14用二进制表示为:

0.14x2=0.28      整数部分  0

0.28x2=0.56      整数部分  0

0.56x2=1.12      整数部分  1

0.12x2=0.24      整数部分  0

0.24x2=0.48      整数部分  0

0.48x2=0.96      整数部分  0

0.96x2=1.92      整数部分  1

0.92x2=1.84      整数部分  1

0.84x2=1.68      整数部分  1

这怎么还不出来结果呢,无奈。。。。。。(由于涉及后面循环了,所以临时更改一个例子,机智)

emmmmm,对的,这个例子不算了,下面来看下一个例子:

举个例子:计算float 2.5在C语言内存中存储情况

(1)整数部分可以写成二进制:0010

(2)小数部分0.5可以写成二进制如下:0.1

0.5x2=1     整数部分 1

(3)故2.5用二进制表示为10.1,然后可以写成类似于科学计数法:1.01x2^1

(4)根据上面的结论可以得出指数部分为:c=1+127=128   二进制表示为:10000000

(5)尾数部分为01填入即可

最后得出float 2.5在C语言内存中存储的形式为:

0 10000000 01000000000000000000000

下面验证这个结果是否等于2.5?

https://www.h-schmidt.net/FloatConverter/IEEE754.html

3e5abe0380b38a8c573d0db658a5f2b6.png

3、下面开始讨论float取值范围

前面知float存储的数字可以写成 ;当b和c最大时候就是float的取值范围。

首先来看c,指数位数为11111111最大,因为这个数有特殊用途,所以要减去1得11111110

接下来看b,可知当b全为1时,11111111111111111111111

此时为最大取值范围。

72b8158527ab97d8764898203965713f.png
故可以得出最后结果float取值范围为:
23a86171d6248c4af8118663159ec2db.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式职场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值