JavaScript 64位数字精度

JavaScript 64位数字精度,javascript,64-bit,precision,Javascript,64 Bit,Precision,有没有一种方法可以在JavaScript中表示精度高于53位的数字?换句话说,有没有一种方法可以表示64位精度的数字 我试图实现一些逻辑,其中64位数字的每一位都代表一些东西。当我试图设置高于2^53的位时,我丢失了较低的有效位 Math.pow(2,53) + Math.pow(2,0) == Math.pow(2,53) 有没有一种方法可以实现自定义库或其他什么来实现这一点?GWT团队已经添加了一个长模拟支持,因此java长模拟实际上可以容纳64位。您想要64位浮点数还是整数?我只需要使用

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

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

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

有没有一种方法可以实现自定义库或其他什么来实现这一点?

GWT团队已经添加了一个长模拟支持,因此java长模拟实际上可以容纳64位。您想要64位浮点数还是整数?

我只需要使用整数数组或字符串


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

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

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

根据定义,浮点数是不精确/近似值,而像long这样的整数则不是。GWT总是持有一个64位的long-使用这种long的数学永远不会使用精度。例外情况是溢出,但当您添加两个需要超过64位的非常大的长值(例如2^32-1+2^32-1)时,溢出与Java etc中发生的情况精确匹配


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

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


Long有时会在DB中保存内容的ID,因此重要的是不要丢失一些较低的位。。。但是浮点数大部分时间用于计算。使用浮动来持有货币或类似的精确价值显然是错误的。如果您确实需要64位精度,请在速度更快的服务器上进行计算。

以下代码可能适合您;但是,我还没有测试它:
是的,11位是为指数保留的,只有52位包含值,也称为分数。 Javascript允许对数字进行逐位操作,但根据Javascript标准规范,在这些操作中只使用前32位


但我不理解误导性的GWT/Java/Javascript中的冗长答案/双重问题?Javascript不是Java。

谷歌的闭包库就是为了这个目的。

有一些特殊的原因,你不能将它拆分为两个变量,或者使用字符串或数组?将它拆分为两个变量是我现在看到的解决方案。字符串和数组的效率似乎很低,因为我将只使用64位中的少数几位。谢谢。我认为数组和字符串在这里是一种低效的数据结构。因为我将只使用64位中的很少一位。目前我正在考虑使用两种数字类型来表示高32位和低32位。谢谢问题是,如果你试图进行位操作,你不能依靠双精度来保持一致性。Javascript不是用来在位层上操作数据的。完全明白你的意思。我是javascript或浮点数字方面的专家,js中是否有使用定点算法的数据类型?不,这很令人伤心,但却是事实(但对于一个普通的web应用程序来说,这是不需要的。用问题回答问题从来都没有帮助。此外,服务器端JavaScript变得越来越普遍。因为可能只是询问者做了错误的事情,因为他们不知道自己在做什么……编写ProtoBuf JavaScript代码的人也很久以前就被孤立了。)m关闭库,以便您可以单独使用它: