我认为JavaScript仅支持NaN的一个二进制表示的原因是,它允许解释器通过将该特定位模式检查为64位整数而不是依赖于FPU来加速涉及NaN的操作处理它们?
答案 0 :(得分:0)
使用我的Intel Core2 Quad CPU(2.33GHz)PC进行了比较
for(i=0;i<100000000;++i) x += 1.0;
在C ++和JavaScript中,x
首先等于0.0
,然后再到NaN
。
C++ x==0.0: 124ms
C++ x==NaN: 11888ms
JS x==0.0: 268ms
JS x==NaN: 432ms
因此,似乎JavaScript 利用了它已经必须动态调度算术运算符以将NaN
视为特殊情况的事实。
我猜测它是一个没有数据的隐藏类型,因此NaN
只有一个二进制表示。