javascript - 为什么我从两种形式的相同数学表达式 [javascript] 中得到不同的结果?

标签 javascript

知道:x^2 - 4y^2 = (x - 2y)*(x + 2y)
enter image description here
我写了以下代码:

x = 450000005;
y = 225000002;
n = x * x - 4 * y * y;
m = (x - 2 * y) * (x + 2 * y);
console.log(n, m);

输出是:
900000032 900000009
那么在 JavaScript 内部发生了什么使这两个表达式产生不同的结果呢?
(并非所有数字都会发生这种情况!)

最佳答案

您的第一个计算超出了 Number.MAX_SAFE_INTEGER ,这意味着它无法准确表示。使用 BigInt s 相反会产生正确的结果。

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());

关于javascript - 为什么我从两种形式的相同数学表达式 [javascript] 中得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65220732/

相关文章:

javascript - 在 Chrome 下更改其 href 属性时更新链接的访问状态

javascript - IE8 在显示 CSS 样式表时出现问题

javascript - 在 v-for 之后将模态绑定(bind)到相应的按钮

javascript - 如何在我的博客中放置滚动内容

javascript - Aurelia 中未加载模块

javascript - 如何在模拟函数: Assertion Error , mocha后检查属性值

javascript - 为什么这个时钟上没有显示秒针? (带有 javascript 的 HTML5 cavas 层)

javascript - vue 将自定义组件作为属性传递给父组件

javascript - 调整条形图中的条形大小

javascript - Node JS : Not inserting into mongodb