数字精度如何影响JavaScript中的性能,或者它是什么?

时间:2015-03-09 13:46:28

标签: javascript performance mongodb numbers

在JavaScript中,所有不同类型的数字只有一种类型。使用的数字中的小数位数(精度)是否会影响性能,尤其是在JavaScript中?如果有,怎么样?

如何在MongoDB中保存数字:精确数字是否比不太精确的数字占用更多空间?

2 个答案:

答案 0 :(得分:1)

一般没有。当一个数字不适合31b signed int时,会有一些可能的性能影响。

A tour of V8: object representation解释

  

根据规范,JavaScript中的所有数字都是64位浮点数。我们经常使用整数,因此V8尽可能表示带有31位有符号整数的数字(低位始终为0;这有助于垃圾收集器区分数字与指针)。因此具有快速小整数元素类型的对象仅包含此类型的数字。 如果我们想要存储小数或更大的整数或特殊值(如-0),那么我们需要将数组升级为fast double。这涉及可能昂贵的复制和转换操作,但在实践中并不经常发生。快速双打对象仍然非常快,因为所有数字都存储在未装箱的表示中。如果我们想要存储任何其他类型的值,例如字符串或对象,我们必须升级到一般数组快速元素。

答案 1 :(得分:0)

  

使用的数字中的小数位数(精度)是否会影响性能,尤其是在JavaScript中?如果有,怎么样?

没有。 JavaScript中的数字类型是一个64位浮点值,其基数为2,并且始终具有相同的精度。计算机一点一点地处理这些数据,这些数据是否代表像1.0这样的人类看似简单的东西或像123423.5645632那样看似复杂的东西并不重要。事实上,对于基地2花车,人类'价值就像“硬”一样,因为1.1真的由更长的数字表示(如1.10000000000000054)。所有这些都无关紧要,因为计算机真正运行64个零和0。在浮点数中总会有一些神秘的例外,但那些通常在实践中并不重要。

  

如何在MongoDB中保存数字:精确数字是否比不太精确的数字占用更多空间?

十进制数字存储为双精度数(64位),无论是1.0还是1.1221234423都无关紧要。同样,这些数据类型的位数是恒定的。

对于int来说也是如此,但MongoDB支持32位和64位整数。所以NumberLong确实比常规的32位整数大,并且与双精度一样大。