浮点数float,double的存储

本文解释了浮点数(如float和double)的存储机制,采用科学计数法表示并讨论了如何通过省略指数中的1来提高精度。文章还提及了浮点数存储中关于E值的处理和与整形类型的区别,以及类型转换时可能出现的问题。
摘要由CSDN通过智能技术生成

浮点数因为有小数点,所以和整形等存储就不太一样。

那么就出现了另一种方法:

我们以float来进行讲解,然后double储存是类似的。

 首先我们数学中有种数据的表示方法:科学计数法。而我们存储float,double也是差不多的。

-1000.86我们可以写成 (-1)^1  *  1.00086  *  10^3;

10.24我们可以写成 (-1)^0     *    1.024   *10^1;

那么我们把十进制改成二进制:

5.5我们写成二进制:101.1->  (-1)^0  *   1.011  *  2^2

那么我们推广到任意形式:  (-1)^S  *  M  *   2^ E

我们只要存储S M E  就行了。

 其中E的取值范围是1<=E<2这样保证了E全是1.什么,那么我们就可以将1省掉,只保存小数点后面的数据,这样就可以增加我们的精度。

为什么说叫增加精度呢?因为我们的float和double都是无法都精确保存数据的。我们小数点后一位数是1/2,后第2位数1/4,后第三位数1/3,这导致一些数是无法精确保存或者要很长的二进制数组来保存。

但是还有一个问题,就是如果我们存一个0.0000000000001,我们的E就要存负数,这样我们是不还要额外增加一个比特来存呢?事实不是,我们存入的是数据都是在实际数据上加了127了的。每次运用的时候还需要-127,这样就统一了改变后的数据都为正数。这里我们也不必担心加了之后还是负的。我们看E的内存是不是和char的内存一样,那么-128<=e<=127。但是我们的-128是char中规定的,或许在浮点数里面规定的不同,这样就保证了E>=0。

下面是double的储存形式:

因为浮点数和字符形整型数不同。我们在整形数、字符之间强制类型转换还有可能保证打印的数据不出错,但是我们如果拿给浮点数就彻底出错了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值