解说float取值范围计算过程

解说float取值范围计算过程1、先给出实型变量取值范围实型变量可以分为单精度(float)(4字节)、双精度(double)(8字节)、长双精度(longdouble)(8字节)三种类型。在VC6.0doub…

大家好,欢迎来到IT知识分享网。

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.14×2=0.28      整数部分  0

0.28×2=0.56      整数部分  0

0.56×2=1.12      整数部分  1

0.12×2=0.24      整数部分  0

0.24×2=0.48      整数部分  0

0.48×2=0.96      整数部分  0

0.96×2=1.92      整数部分  1

0.92×2=1.84      整数部分  1

0.84×2=1.68      整数部分  1

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

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

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

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

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

0.5×2=1     整数部分 1

(3)故2.5用二进制表示为10.1,然后可以写成类似于科学计数法:1.01×2^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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15344.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信