javaScript 中的数学

Maths in javaScript

我正在制作一个适用于大数(最多 2^900)的算法,但很多运算仍然不是那么大。在这种情况下,我想做普通数学而不是大数算法。 我有这样的部分代码:

    if (a * b < 1e17)
    {
        return(a * b);
    }
    else
    {
        //some large numbers maths
        return(res);
    }

而且我不确定这是否是检查结果是否适合 Number 变量的好方法。我知道有些语言在出栈时并不总是 return 大东西。 javascript是怎么做到的?当 a*b 太大时,if (a * b < 1e17) 会一直给出 false 吗?

您要求澄清问题。好吧,如果不清楚,我会提出一个确切的问题:这部分代码对于每个可能的数字 a 和 b 是否都能正常工作(如果乘法的实际结果小于 1e17,则必须输入 if 语句,否则 - 输入 else) ?如果 a 和 b 的长度都超过 9 位,它是否总是“转到”else?

    if (a * b < 1e17)
    {
        return(a * b);
    }
    else
    {
        //some large numbers maths
        return(res);
    }

是的,这段代码可以正常工作。 JavaScript 中的数字数据类型不会像某些其他编程语言中的数字数据类型那样遇到“环绕”问题,在这种情况下,计算可能会溢出并产生完全错误的结果。

Number 数据类型确实有限制 精度,因为它存储在固定数量的内存中。 Number 数据类型仅精确到大约 16 位有效数字。例如,将两个数字与 10 个有效数字相乘 而不是 得到一个具有 20 个正确有效数字的数字:只有前 16 或 17 位是正确的。