arm浮点运算

首先总结一下计算机中的浮点数的存储

浮点数的标准是IEEE-754,规定了浮点数的存储都是通过科学计算法来存储的,n2-e的表示。

  浮点数首先分为,定浮点(fixed-point)和浮点(float-point),定浮点就是说e的值是不变的。

  目前浮点的计算都是将浮点转换为定浮点来计算,由此衍生出,单精度浮点和双精度浮点

浮点数的存储,前半部分表示exponent(可以是负数,使用补码表示),后半部分表示fraction(规定fraction必须是1.x的格式)。

单精度的储存位宽是32bit,e占7bit,最大表示-62---63,fraction占23bit。

双精度的存储位宽是64bit,e占10bit,最大表示-510---511,fraction占52bit。

比如1.01 X 2-3,其中exponent表示-3,.01表示fraction。

  

单精度和双精度的,精度对比:

  

浮点数的规则化(normalized)

  fraction必须是|1.x|的格式;

非规则化的数:

  正零:所有bit都为0;

  负零:除了符号位,都为0;

  无穷大:exponent的所有bit都为1;fraction的所有值都为0;

  负无穷大:exponent的所有bit都为1;fraction的所有值都为0,符号位为1;

  非法数值:exponent的所有bit都为1;fraction的值不全为0;NaN(Not a Number)

浮点数的计算:

  1)判断是否有操作数为0;

  2)对阶:小阶向大阶对齐,阶小的那个数(看正负),exponent加n,fraction右移n位。

  3)加减运算,fraction做加减运算,exponent不变。

  4)结果规格化。(这时会有舍入处理,IEEE754规定了几种舍入)

    判断溢出,浮点只有exponent的上溢,(正数相加不为负,负数相加不为正);

加减:

  

乘法:

  

除法:

   

平方根:

  

Basic op:

  

  

应用过程中,硬件CPU,FPU,往往有具体的指令(VFP),

      软件,lib,往往有具体的关联函数(intrinsics),

猜你喜欢

转载自www.cnblogs.com/-9-8/p/9254964.html