理解浮点数的构成

理解浮点数的构成个人觉得对于新手是一个比较困难的事,我就想了好久,看了好几篇参考资料,才大概弄清。。。

下面就说一下自己的理解吧~

关于单精度浮点型的构造:

一般6-8位有效数字(假设float占4个字节,一个符号位,8个指数位,23个尾数。

符号位[  ]+(只存放指数)指数位[  ] [  ] [  ] [  ] [  ] [  ] [  ] [  ]+尾数[  ]*23)

上面给出了浮点数的表示方法,6-8位有效数字大概就是10^6到10^8个数(一般超过7位就四舍五入了),这个与编译器有关。其实,也就是说float里面有2^23=83886087个数,对应大概能表示10^6—10^8个数。一个符号位就是正负的符号0或1,还有8个指数位由于有正负也就是-127~128。

说道这里,大家感觉可能是懂了,不过很有可能还是没懂。

我给出问题,float能表示的大概的范围-3.4E38~3.4E38,这个数又是怎么来的?

我们知道计算机是以二进制来存取数据的,二进制也有其对应的浮点数形式。比如,1001.101.转换成10进制就是9.625.而对于IEEE标准要求浮点数必须是规范的,小数点左侧必须为1.这样,就变为1.001101*2^3(这里要注意,没错,二进制的科学技术法就是2的n次幂)。所以,对应的32为表示如下。

符号位0|指数幂 10000010|尾数 00110100000000000000000

这里我们看到尾数第一个1省略了,因为IEEE规定了小数点第一位是1,所以可以将这个符号位添加到后面来保存更多的数据。

指数位是这样理解的,因为浮点数2进制的指数范围为-127~128,而8位2进制数能表示的数的范围0-255(无符号数,不要把这个指数幂当成有符号数),所以这里要有一个偏差(需要多思考一下)比如,当实际的指数值为0的时候,在2进制的指数位表示为127(实际值=e—127).所以,当实际值为3的时候,e=130(也就是指数位为130,10000010)

最后再举一个例子,

-6.5

符号位1|指数幂 10000001|尾数 10101000000000000000000

现在应该知道那个范围是怎么算出来的吧,

理解浮点数的构成

截图就是2^128的结果(浮点数的大致范围由指数位来决定)。

(说的可能还是有点混乱,之后如果更好的解释思路回来修改一下)

下面是一个C++中有关基本数据类型的表格:

类型

含义

最小尺寸

bool

布尔类型

未定义

char

字符

8位

wchar_t

宽字符

16位

char16_t

Unicode字符

16位

char32_t

Unicode字符

32位

short

短整型

16位

int

整型

16位

long

长整形

32位

long long(C++ 11)

长整形

64位

float

单精度浮点型

6-8位有效数字(假设float占4个字节,一个符号位,8个指数位,23个尾数。2^23=83886087位,2^8<=>(-128~128)\

Float表示-2^128~2^128

内存中

符号位[]+(只存放指数)指数位[][][][][][][][]+尾数[]*23)

double

双精度浮点型

10位有效数字

long double

扩展精度浮点型

10位有效数字

原文链接: https://www.cnblogs.com/soft4/p/5078731.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    理解浮点数的构成

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/221942

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午11:30
下一篇 2023年2月13日 上午11:30

相关推荐