7

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

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

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

有没有办法实现自定义库或实现这一目标的东西?

4

7 回答 7

1

谷歌的 Closure 库有goog.math.Long用于此目的。

于 2013-03-15T06:24:48.653 回答
0

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

该库当然包含添加内容的方法,例如添加两个“long”并获得“long”结果。在您的 GWT Java 代码中,它看起来就像两个常规的 long - 一个不需要摆弄或注意元组。通过使用这种方法,GWT 避免了您可能暗示的问题,即“longs”会降低精度,这在许多情况下是不可接受的。

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

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

于 2009-02-05T02:51:36.503 回答
0

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

javascript 中的数字是双精度数,我认为您的等式中存在舍入误差。

于 2009-02-03T08:59:57.697 回答
0

GWT 团队添加了 long 仿真支持,因此 java longs 真正拥有 64 位。你想要 64 位浮点数还是整数?

于 2009-02-03T07:32:47.030 回答
0

以下代码可能对您有用;不过我还没有测试过: BigDecimal for JavaScript

于 2011-09-06T11:38:54.753 回答
-1

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

我不明白 Javascript/double 问题中误导性的 GWT/Java/long 答案吗?Javascript 不是 Java。

于 2013-01-25T06:08:07.407 回答
-7

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

Longs 有时会在数据库中保存东西的 ID,因此重要的是不要丢失一些低位......但浮点数大部分时间用于计算。使用浮点数来保存货币或类似的精确值是完全错误的。如果您真的需要 64 位精度,请在更快的服务器上进行数学运算,依此类推。

于 2009-02-05T02:53:53.533 回答