浮点数

今天看到一个64位浮点数打印的Erlang代码,其中有两个很神奇的数字-1074和1075,感觉不知何意。

各种翻资料,关于浮点的主要是IEEE 754。里面提到两个模式,规约模式和非规约模式。当我们无限的接近0的时候,就可以使用非规约模式。64位的双精度浮点,11位是指数,52位是尾数,同时为了避免问题,指数部分永远需要是正数,那么就需要加一个固定的偏移值1023(这里面有个计算公式,公式略显复杂,但是道理很简单)。

因此在非规约模式(指数部分为0)下,直接可以有最小的非规约数 2^-1074。-1074来自11位指数最小值-1022 + 尾数位数52。最大规约数是(1-(1/2)^ 53) * 2^1024),但是根据规定,指数最大为1023,所以直接加上尾数的位数1023 + 52就是1075了。

之所以出现这两个数字,是将一些复杂的流程精简化的结果,一切都是为了加快计算。


你可能感兴趣的:(浮点数)