浮点运算
浮点,英文float point,其字面意义就是可以漂移的小数点(浮动的小数点),来表示含有小数的数值。
我们在数学运算中,经常会遇到无限小数,如1/3=0.333333…无限循环,然而计算机存储容量是有限的,需要舍弃掉一些精度,存储近似值。
讨论浮点精度的目的也是在于程序中进行浮点数使用以及比较的时候更加小心。
浮点在计算机中存储
以前不同CPU的浮点表示方式是不同的,这就导致了机器之间的兼容性问题,后来英特尔发布了8087浮点处理器,被IEEE采用,成为业界的标准,被几乎所有CPU采用(有的GPU除外)。
IEEE754定义了浮点的存储格式,如何取舍(rounding mode),如何操作(加减乘除等)以及异常处理标准(异常发生的时机与处理方式)。
首先以单精度浮点型float32为例:
float32是使用32位来表示浮点数的类型,主要有三个部分
- sign,符号位: 1bit,0是正数,1是负数
- exponent,指数部分: 8bit,以2为底的指数
- fraction,有效数部分: 23bit,实际表示24bit数值,浮点数具体的数值,
sign
0是正数,1是负数;