关于IEE754浮点数

1.浮点数:

       是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法

       浮点数分为float和double,分别占4,8个字节,即32,64位. 

2.为什么计算机中的小数被称作浮点数?(问题与答案均从知乎中摘录而来,可以帮助像我这样的小白理解浮点数的概念)


小数点在数制中代表一种对齐方式,比如说你要比较1000和200哪个比较大你应该怎么做呢?你必须把他们右对齐:
1000
 200

然后发现1比0(前面补零)大,所以1000比较大。那么如果是比较1000和200.01呢?这时候就不是右对齐了,而是对应位对齐,也就是小数点对齐:
1000
 200.01

小数点位置在进制表示中是至关重要的,位置差一位整体就要差进制倍(十进制就是十倍)。在计算机中也是这样,虽然计算机使用二进制,但在处理非整数时,也需要考虑小数点位置的问题,无法对齐小数点就无法做加法、减法比较这样的操作。我们说小数点位置,永远是说相对于我们存储的数位来说的,比如说我们存储了01001001,然后小数点在第三位之后,也就是010.01001了。
在计算机中处理小数点位置有浮点和定点两种,定点就是小数点永远在固定的位置上,比如说我们约定一种32位无符号定点数,它的小数点永远在第5位后面,这样最大能表示的数就是11111.111111111111111111111111111,它是32 - 2^-27,最小非零数是2^-27。定点数是提前对齐好的小数,整数是一种特殊情况,小数点永远在最后一位之后。
定点数的优点是很简单,大部分运算实现起来和整数一样或者略有变化,但是缺点则是表示范围,比如我们刚才的例子中,最大只能表示32;而且在表示很小的数的时候,大部分位都是0,精度很差,不能充分运用存储单元。浮点数就是设计来克服这个缺点的,它相当于一个定点数加上一个阶码,阶码表示将这个定点数的小数点移动若干位。由于可以用阶码移动小数点,因此称为浮点数。【作者:灵剑 链接:https://www.zhihu.com/question/19848808/answer/120393769 来源:知乎】

3.IEE 745  浮点数(百度百科摘录)         IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。         IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。只有32位模式有强制要求,其他都是选择性的。大部分编程语言都有提供IEEE浮点数格式与算术,但有些将其列为非必需的。例如,IEEE 754问世之前就有的C语言,有包括IEEE算术,但不算作强制要求(C语言的float通常是指IEEE单精确度,而double是指双精确度)。 4.小数单精度转化(鬼知道我翻了多久资料才搞明白)        首先,将小数化为二进制数,具体方法如下:整数部分除二取余即可,小数部分单独取出,乘二取整数部分,当整数部分为1时,再次取小数部分乘二,直到最后小数部分为0即可         如:5.75         整数部分5化为二进制为101,小数部分0.75进行二级制转化时,0.75*2=1.5,取整数部分1,接着用小数部分0.5*2=1.0,取整数部分1,由于此时小数部分已为0,所以操作结束,5.75的二进制为101.11。         接着,将二进制规格化 将小数点移到第一位和第二位之间,101.11变为1.01 11,需要移动两位,所以表示为1.01 11*2^2,(即e=2) 符号位(S):0 阶码(E):00000010(2的二进制,用0在前填满8位) 尾数(M):0111   5.将5.75,161.875,-0.0234375进行单精度浮点数转化 5.75    0 1.01 11*2^2 161.875  0  1.100001 111*2^7 -0.0234375     1  1.10000000*2^-6            
上一篇:数字电路--H74139


下一篇:【V2-笔记-概述 】5G&车联网