浮点数精度

# 浮点数精度

# 十进制转二进制

计算机中数据的存储都是采用二进制,十进制转二进制方法如下:

  • 整数部分采用除2取余法

  • 小数部分采用乘2取余法

# 数字类型

ECMAScript 中的 Number 类型使用 IEEE754 标准来表示整数和浮点数值。所谓 IEEE754 标准,全称 IEEE 二进制浮点数算术标准,这个标准定义了表示浮点数的格式等内容。

在 IEEE754 中,规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度、与延伸双精确度。像 ECMAScript 采用的就是双精确度,也就是说,会用 64 位来储存一个浮点数。

# 浮点数存储

根据IEEE754双精度的标准,一个浮点数分为3个部分:

  • 符号位:占1位,存放0或1,0表示整数,1表示负数

  • 对应二进制的的科学计数法的小数部分:占52位。如一个二进制为10111.01111,科学计数法表示为1.011101111 * 2 ^ 4那么我们只用存小数点后的011101111部分。

  • 对应二进制的的科学计数法的指数部分:占11位。指数部分有正有负,存储时将位数平分。11位平分就是(2 ^ 11) / 2 - 1 = 1023,可以存-1024 ~ 1023之间的数。

# 0.1 + 0.2 !== 0.3