您的第一个计算超过了Number.MAX_SAFE_INTEGER
,这意味着它无法被准确地表示。使用BigInt
将产生正确的结果。
console.log("Is 450000005 * 450000005 (x * x) safe?",
Number.isSafeInteger(450000005 * 450000005));
x = 450000005n;
y = 225000002n;
n = x * x - 4n * y * y;
m = (x - 2n * y) * (x + 2n * y);
console.log(n.toString(), m.toString());
Number.MAX_SAFE_INTEGER
是:
console.log(Number.MAX_SAFE_INTEGER);
其中包括 x * x
的表达式超出了限制。
请改用 BigInts:
x = 450000005n;
y = 225000002n;
n = x * x - 4n * y * y;
m = (x - 2n * y) * (x + 2n * y);
console.log(String(n), String(m));