Javascript数值范围
另一方面,64位浮点数的指数部分的长度是11个二进制位,意味着指数部分的最大值是2047(2的11次方减1)。也就是说,64位浮点数的指数部分的值最大为2047,分出一半表示负数,则JavaScript能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。
如果指数部分等于或超过最大正值1024,JavaScript会返回Infinity(关于Infinity的介绍参见下文),这称为“正向溢出”;如果等于或超过最小负值-1023(即非常接近0),JavaScript会直接把这个数转为0,这称为“负向溢出”。事实上,JavaScript对指数部分的两个极端值(11111111111和00000000000)做了定义,11111111111表示NaN和Infinity,00000000000表示0。
var x = 0.5; for(var i =0;i<25;i++) x = x*x; x // 0
上面代码对0.5连续做25次平方,由于最后结果太接近0,超出了可表示的范围,JavaScript就直接将其转为0。
至于具体的最大值和最小值,JavaScript提供Number对象的MAX_VALUE和MIN_VALUE属性表示(参见《Number对象》一节)。
Number.MAX_VALUE // 1.7976931348623157e+308 Number.MIN_VALUE // 5e-324