gpt4 book ai didi

javascript - 为什么模幂函数在 Python 和 Javascript 中对大数的工作方式不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:23 24 4
gpt4 key购买 nike

我需要在 python3 和 javascript 上对相当大的数字执行模幂运算。我有执行任务的功能,但它们会给我不同的输出。

Python(所有三个都以相同的方式工作):

pow(176672119508, 55, 200000023499)

def expmod_iter(a,b,c):
x = 1
while(b>0):
if(b&1==1): x = (x*a)%c
a=(a*a)%c
b >>= 1
return x%c

def pow_mod(x, y, z):
number = 1
while y:
if y & 1:
number = number * x % z
y >>= 1
x = x * x % z
return number

# The result is always 124912252967

现在是 JavaScript(两个函数的工作方式相同):

function powMod(x, y, z) {
let number = 1;
while (y) {
if (y & 1) {
number = number * x % z;
}
y >>= 1;
x = x * x % z;
}
return number;
}

function expmod_iter(a, b, c) {
let x = 1;

while (b > 0) {
if (b & 1 === 1) {
x = (x * a) % c;
}
a = (a * a) % c;
b >>= 1
}
return x % c;
}

console.log(powMod(176672119508, 55, 200000023499));
console.log(expmod_iter(176672119508, 55, 200000023499));

// The result is always 138693107570

此外,当我使用 this service 时根据我的号码,我还得到了 138693107570。


为什么会这样?我什至不确定现在哪个变体是正确的。然而,对于较小的数字,函数给出相同的结果。

是否有可能以某种方式从函数中获得相同的结果?结果在数学上是否正确并不重要,结果至少应该相同。

您能解释一下为什么会这样吗?是功能设计吗?对我来说,两种语言的功能似乎是相同的。

有没有办法从两种语言的函数中得到相同的结果?

最佳答案

Python 的结果是正确的。

Python 使用任意精度的整数表示,而 Javascript 将所有数字存储为 IEEE754 64 位 float (并暂时将它们强制转换为 32 位整数以进行按位运算)。这意味着对于大整数,Javascript 代码开始失去精度,而 Python 代码在整个计算过程中保持所有结果的精确值。

如果你想在 Javascript 中精确处理大整数,你需要使用 an appropriate library .或者,您说您不太关心结果是否正确。不关心这件事真的很奇怪,但如果你真的有这种感觉:

# Python
def wrongpow(a, b, c):
return 0

// Javascript
function wrongpow(a, b, c) {
return 0;
}

关于javascript - 为什么模幂函数在 Python 和 Javascript 中对大数的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com