首页 > 编程语言 >IEEE-754浮点数标准与JavaScript中的number

IEEE-754浮点数标准与JavaScript中的number

时间:2022-11-14 17:16:16浏览次数:67  
标签:Infinity 754 尾数 MAX 浮点数 JavaScript Number VALUE

1、概述

如何使用8个字节表示特定的数字(整数或小数),其中要满足精度足够高,和表示的数字尽可能的大。聪明的你肯定想到使用科学计数法来表示,其中64位中,需要包含确定正负的符号位(1比特),确定数字大小的指数位(11比特)和确定数字精度的尾数位(52比特)。这就是IEEE-754双精度浮点数的基本内容,但在规范实现上有更多的定义。

 

 

 1、符号位使用s(sign)表示,0是正数、1为负数;

2、指数位 E(Exponent)为11位,指数可以为正数,也可以为负数。为了处理负指数的情况,实际的指数值按规范需要加上一个偏置(Bias)值(1023)作为保存在指数段中的值;

3、有效数字位 M(Significand)是二进制小数,共52位。表示小数点后的部分,整数部分永远为 1,计算机不存储,但是运算的时候会加上1。

2、数字表示

十进制1024的表示:

(1024).toString(2) //1024 使用二进制表示为: 
'10000000000'

进一步可写为:1 * 2^10。由于尾数位不存储1,所以尾部位全为0,指数为 10 + 1023, 为1033,二进制为'10000001001',符号位为0,因此整体格式为:

 

 

 浮点数3.141592654的表示:

(3.141592654).toString(2)  // 转换直接使用JavaScript提供的api
'11.00100100001111110110101010001010010010001010101'

小数点往前挪一位,写成科学计数法,尾数位为: 100100100001111110110101010001010010010001010101 (1不储存)指数位为1 + 1023 = 1024 符号位为0

 

 

3、特殊值:

JavaScript的Number 类型拥有几种特殊类型,+-Infinity、NaN、Number.MAX_VALUE、Number.MAX_SAFE_INTEGER。

3.1、Infinity 表示无穷大小,在IEEE754中的表示为:即指数位全为1,尾数位全为0,符号位为1 表示 -Infinity

 

 

 3.2、NaN 当指数位全为 1 时,尾数位为非零时,结果值就被称为“NaN”(Not any Number)

 

 

 

3.3、 Number.MAX_VALUE 为 IEEE -754规范中能表示的最大值,很显然尾数为最大,且避开Infinity 定义(比Infinity小1)和NaN的定义,即能表示的最大值。

 

在JavaScript中:

Number.MAX_VALUE
1.7976931348623157e+308

3.4、Number.MAX_SAFE_INTEGER 为最大能安全表示的值,超过该数会丢失精度,无法进行安全计算。数值为 2^53 -1;

 

 

 由于储存精度的位数是固定的,比最大值大1时,指数位进位,尾数位归0,比最大值大2时,尾数位还是全部为0,向偶舍入的规则导致尾数位不会进位。

4、问题:

最大值与Number.MAX_VALUE 与 Infinity 差多少?

由于Infinity 无法参与计算,直接减是不可以的。而且之间的差值显然不是1 。还是由于计算精度的问题,看一下MAX_VALUE 、Infinity 两个数字之间的表示,顺序如下:

 显然尾数位再进一位,即达到INfinity值。但这个值是多少呢?

 

 

 要让 Number.MAX_VALUE 变成 Infinity , 至少要加上一个被 IEEE754四舍五入为 2**970 的数。

参考链接:

JS 中的 MAX_VALUE 和 MAX_SAFE_INTEGER 是怎么来的

 浮点数向偶数舍入的问题

为什么在js中Number.MAX_VALUE + 1不是Infinity?

IEEE 754 双精度浮点数内部表示法

http://bartaz.github.io/ieee754-visualization/

http://c.biancheng.net/view/314.html

标签:Infinity,754,尾数,MAX,浮点数,JavaScript,Number,VALUE
From: https://www.cnblogs.com/engeng/p/16889553.html

相关文章