gpt4 book ai didi

javascript - 为什么 Javascript 不能给出比 python 更准确的科学计算结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:47 24 4
gpt4 key购买 nike

我尝试在 Javascript 中执行模幂来验证算法,并震惊地发现 Javascript 与 Python 相比没有给出准确的结果,为什么会这样。我认为这与 Javascript 处理数据类型(如文本)的方式有关,但我想了解更多,并且我知道设计这两种语言的目的。

Modular Exponentiation result comparison in .js and .py

最佳答案

当您首先查看模运算之前的中间结果时,它会变得更清楚:

> Math.pow(17, 22)
1.1745628765211486e+27
>>> pow(17, 22)
1174562876521148458974062689

如您所见,Python 结果的位数比 JavaScript 结果多很多。这是由于每种语言处理数字或整数的方式所致。

Python 有一个 int type ,它基本上是无限的:“这些代表无限范围内的数字,仅受可用(虚拟)内存的限制。” 所以只要你有可用的内存,整数可以用这种类型表示的东西可以有你想要的那么大——而不会损失任何精度。

输入 JavaScript 和 ECMA 标准。与 Python 和其他语言不同,我们只有一个类型负责所有数字类型:Number。这种类型保存整数和小数,没有任何区别。它们在内部表示为 double precision floating point numbers 。因此,它们受到这些限制,只允许一定数量的大数字精度。因此,17^22 的最佳结果就是上面的结果,其余的精度会在此过程中丢失。


如果您不太注重性能,您可以编写自己的 pow 函数,该函数额外采用第三个参数对结果应用模运算,类似于 Python 的 pow 的做法。

function modpow (base, exponent, modulo) {
var result = base;
while (exponent > 1 ) {
result = (result * base) % modulo;
exponent--;
}
return result;
}

当然,这比内部的 pow 效率低很多,而且只适用于整数指数,但至少它会正确地解决你的工作:

> modpow(17, 22, 21)
4

关于javascript - 为什么 Javascript 不能给出比 python 更准确的科学计算结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19742689/

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