JavaScript 64位数字精度

时间:2009-02-03 06:54:13

标签: javascript 64-bit precision

有没有办法在JavaScript中表示高于53位精度的数字?换句话说,有没有办法表示64位精度数?

我正在尝试实现一些逻辑,其中64位数字的每个位代表一些东西。当我尝试将位设置为高于2 ^ 53时,我丢失了较低的有效位。

Math.pow(2,53) + Math.pow(2,0) == Math.pow(2,53)

有没有办法实现自定义库或其他东西来实现这个目标?

7 个答案:

答案 0 :(得分:1)

Google的Closure库为此目的goog.math.Long

答案 1 :(得分:0)

GWT团队增加了长时间的仿真支持,因此java longs确实拥有64位。你想要64位浮点数还是整数?

答案 2 :(得分:0)

我只使用整数数组或字符串。

javascript中的数字是双倍的,我认为你的等式中存在舍入错误。

答案 3 :(得分:0)

也许我应该添加一些技术细节。基本上GWT长仿真使用两个数字的元组,第一个保持高32位,第二个保持64位长的低32位。

该库当然包含添加两个“长”并获得“长”结果等内容的方法。在你的GWT Java代码中,它看起来像两个常规长 - 一个不需要弄乱或意识到元组。通过使用这种方法,GWT可以避免你可能提到的问题,即“长期”降低精度的低位,这在许多情况下是不可接受的。

虽然浮点数根据定义是不精确/近似的值,但是像long一样的整数不是。 GWT总是保持64位长 - 使用这样长的数学从不使用精度。例外情况是溢出,但是当你添加两个需要超过64位的非常大的长值时,它会准确地匹配Java等中出现的值 - 例如2 ^ 32-1 + 2 ^ 32-1。

对浮点数做同样的操作需要采用类似的方法。您将需要一个使用元组的库。

答案 4 :(得分:0)

以下代码可能适合您;我还没测试过它: BigDecimal for JavaScript

答案 5 :(得分:-1)

是的,11位保留用于指数,只有52位的容量值也称为分数。 Javascript允许对数字进行逐位运算,但根据Javascript标准规范,这些运算中只使用前32位。

我不明白在Javascript / double问题中误导GWT / Java /长答案? Javascript不是Java。

答案 6 :(得分:-7)

为什么有人在javascript中需要64位精度?

Longs有时会在数据库中保存ID,所以重要的是不要丢失一些较低的位...但是浮点数大部分都是用于计算的时间。使用浮动来保存货币或类似的严格值是完全错误的。如果你真的需要64位精度,请在服务器上进行数学运算,其速度更快等等。