让我简短一点。我试图计算
alert((Math.pow(7,35))%71)
但它给了我61,结果必须是70.什么错了?
答案 0 :(得分:2)
您使用的号码对于javascript来说太大了。 int的最大大小为2 ^ 53 - 小于7 ^ 35。
答案 1 :(得分:2)
正如其他人在Math.pow(7,35
之前提到的那样,这个数字对于Javascript来说太大了。
要解决您的问题,您需要使用外部JavaScript库。 (或写自己的;))
以下是处理大数字的Javascript库的一些示例。
答案 2 :(得分:0)
需要更高精度的唯一值是中间结果。因此,如果您的算法不需要有问题的中间结果,那么在不需要更高精度变量的情况下也可以避免这个问题。
以下公式可用于此:
(a.b)%c =(a%c)(b%c)%c
这意味着Math.pow(7,35)%71 =((Math.pow(7,17)%71)*(Math.pow(7,18)%71))%71。
现在中间结果较小,但可能仍然太大。因此,我们需要进一步拆分并将模块运算符应用于较小的中间结果
所以你可以这样做:
Math.pow((Math.pow(7,7)%71),5)%71
但是您可能需要对可变的整数进行此操作(否则,您可以通过对结果进行硬编码来避免此问题)。 因此,您需要了解可以预期的值范围,并定义一个算法,将功率计算分成多个部分,当输入在预期范围内时,结果总是足够小。
无论你为这样的计算选择什么,使用更高精度的变量(使用专门的库)或特定的算法进行计算,你应该始终断言输入,以确保只有当你确定它能够计算时才会返回一个值提供正确的价值。否则,对于不了解其有效范围的任何人,您的实施将变得不可靠。否则返回一个异常,其中包含一条消息,告知哪些输入或输入组合是问题以及原因。