首页 > 其他分享 >c中浮点数类型数据存储

c中浮点数类型数据存储

时间:2022-12-17 21:23:39浏览次数:39  
标签:存储 754 有效数字 浮点数 保存 127 类型 IEEE

浮点数在内存的表示方式

根据国际标准 IEEE(电气和电子工程协会)754,任意一个二进制浮点数 V 可以表示成下面形式:

  1.         (-1)^s * M * 2^E
  2.         (-1)^s 表示符号位,当s=0,V为正数;当s=1,V为负数。
  3.         M 表示有效数字,大于等于1,小于2。
  4.         2^E 表示指数位。

举例来说

 

IEEE 754规定: 对于32位的浮点数,最高的1位是符号位s,接着8位是指数E,剩下的23位是有效数字M。

 

 

 

 

 

 

 

 

 IEEE 754 对 有效数字M和指数E 的特别规定:
一(有效数字M):
前面说过,1<=M<2,也就是说 M 的形式为 1.xxxxxx 的形式,其中 xxxxxx 表示小数部分。
IEEE 754规定,在计算机内部保存M的时候,默认这个数字的第一位总是1,所以可以把1省略掉,只保存小数点后面的xxxxxx部分。
例如在保存 1.01 的时候,只保存 01。后面如果读取到该数据,再把第一位的 1 加上去。
这样做的目的是为了节省 1 位有效数字,可以多保存一位有效数字的空间。
二(指数E),情况有点复杂:
首先,E为一个无符号整数 。这意味着,如果 E 为 8 位,它的取值范围 0~255;如果 E 为 11 位,它的取值范围 0~2047。
但是我们知道,科学计数法中的指数 E 是有负数的情况,所以 IEEE 754规定,存入内存时 E 的真实值必须再加上一个中间值。
对于 8 位的 E,这个中间数是 127;对于 11 位的 E,这个中间数是 1023。比如:2^10 的 E 是 10,所以保存成 32 位浮点数时,必须保存成 10+127=137,即10001001。

int main()
{
   float a = 5.5f;
   //101.1
   //1.011*2^2
  //s=0 e=2 m=1.011
   //s=0 e=2+127 m=011
   //01000000100100000000000000000000
   return 0;
}

从内存中取出来的情况

1.(指数E不全为0 或者 不全为1):
在我们要把指数E从内存中取出,大概率会遇到不全为0 或者 不全为1的情况。这时,浮点数采用下面的规则转换成真实值。即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前面加上第一位的1。
比如:5.0,其二进制形式为101.0。小数点左移2位,得到1.01*2^2,其阶码为2+127=129,表示为10000001;而尾数1.01去掉小数点前面1,剩余01,补齐0到23位,表示为01000000000000000000000,
则5.0的二进制表示形式为:
0 10000001 01000000000000000000000

2.E全为0:
这时表示原来的数据很小,无限接近0了。有效数字M不再加上第一位的1,而是还原成0.xxxxxx的小数。

3.E全为1:
这时,如果有效数字M全为0,则表示该数据无穷大,正负取决于s

 

标签:存储,754,有效数字,浮点数,保存,127,类型,IEEE
From: https://www.cnblogs.com/qiyuancc/p/16989544.html

相关文章

  • redis之五种基本数据类型
    五种基本数据类型redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型常见的5种数据类型是:String、Li......
  • 使用匿名类型存储LINQ查询结果
    匿名类型的特性:1.既支持简单类型也支持复杂类型。简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项;2.匿名类型的属性是只读的,没有属性设置器,它......
  • 前端知识案例8-javascript基础语法-基本数据类型
    ......
  • 前端知识案例9-javascript基础语法-数据类型转换
    ......
  • Java数据类型
    数据类型强类型语言(安全性高,速度慢)​要求变量的使用要严格符合规定,所以变量都必须先定义后才能使用弱类型语言​要求变量的使用符合规定,所以变量都必须先......
  • auto类型推断的同等应用
    根据我的观察,应该就是decltype去掉const和引用的结果。和模板参数的自动推断比较相似,因为以前模板参数是不能省略的,auto和自动推断应该是同时更新的吧和传参过程中的参数......
  • 【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内
    问题描述在从StorageAccount队列中获取数据(Queue),在门户中,明显看见有数据,但是通过消费端代码去获取的时候,就是无法获取到有效数据的情况。获取消息的代码如下:  ......
  • 阿里云对象存储OSS计费规则
    分按时收费和包年包月,使用量大可以包年包月,量少就按量付费:阿里云对象存储OSS1.首先开通对象存储OSS是不收费的;2.你在对象存储OSS上创建了Bucket,创建Bucket也是不收费的;......
  • SharedPreferences对数据的存储
    SharedPreferences简介:                                     它的本质是基于XML文件存储key-......
  • 开发者云对象存储命令行工具
    近期推出了​​开发者云服务​​,我对比了下各产品同其他云厂商之间的价格,开发者云的价格确实是相当香了,就拿我今天要讲的​​对象存储​​的价格为例,列举下各厂商1GB/月价格......