日期:2014-05-16  浏览次数:20436 次

关于无穷大的问题
我看书上说,当一个表达式的运算结果大于Number.MAX_VALUE时,将被赋予值Number.POSITIVE_INFINITY,可是我写了下面的语句,为什么结果不一样呢?
var a1 = Number.MAX_VALUE + 100;
var a2 = Number.MAX_VALUE * 2;
alert(isFinite(a1));     //输出true
alert(isFinite(a2));     //输出false

------解决方案--------------------
isFinite的字面意思是:是有限的吗?
“如果 number 不是 NaN 、负无穷或正无穷,那么 isFinite 方法将返回 true 。 如果是这三种情况,函数返回 false 。 ”


var a1 = Number.MAX_VALUE + 100; 
alert(a1==Number.MAX_VALUE) 
将会alert true.这是为什么呢?
-----
http://bbs.51js.com/thread-66155-1-1.html
jindw 爬虫:
ecmascript的number类型与java语言的double一样,都是64位浮点型(ieee 754)。
表示方法为
符号位 +指数 +尾数。
尾数的长短,确定精确整数大小。
double类型尾数最多可达到53位,所以理论上讲,js的精确整数最大为:Math.pow(2,53)-1 =9007199254740991.
说js的精确整数谓9007199254740992,也没错,但是,这只是一个巧合,她使用了一位指数。
----------
所以,第一个整数失真在:
alert(9007199254740992 == 9007199254740993);//会alert出true来
.
同样是基本浮点数的失真,造成:
alert(a1==Number.MAX_VALUE);//会alert出true来.
isFinite(Number.MAX_VALUE)会是true,
而isFinite(Infinite)就是false.



------解决方案--------------------
Google

BitInt.js