在JavaScript中存储在多维数组中时,大量数字会转换为NaN

在JavaScript中存储在多维数组中时,大量数字会转换为NaN,javascript,arrays,Javascript,Arrays,下面是我面临问题的实际代码摘录: var p = {x:400, y:100, z:100}; var c = {x:250, y:250, z:100}; var o = {x:250, y:250, z:250}; var ta = 1; var r1 = 212.13203435596427; var r2 = 259.8076211353316; var b1 = Math.round(2*r1*r1*(1 - Math.cos(ta)) - r2*r2 + (o.x+p.x)*(o.x

下面是我面临问题的实际代码摘录:

var p = {x:400, y:100, z:100};
var c = {x:250, y:250, z:100};
var o = {x:250, y:250, z:250};
var ta = 1;
var r1 = 212.13203435596427;
var r2 = 259.8076211353316;
var b1 = Math.round(2*r1*r1*(1 - Math.cos(ta)) - r2*r2 + (o.x+p.x)*(o.x-p.x) + (o.y+p.y)*(o.y-p.y) + (o.z+p.z)*(o.z-p.z));
var b2 = Math.round(r1*r1*(1 - 2*Math.cos(ta)) + (c.x+p.x)*(c.x-p.x) + (c.y+p.y)*(c.y-p.y) + (c.z+p.z)*(c.z-p.z));
var b3 = Math.round((r2+r1)*(r2-r1) + (c.x+o.x)*(c.x-o.x) + (c.y+o.y)*(c.y-o.y) + (c.z+o.z)*(c.z-o.z));
var A = [ [2*(o.x - p.x), 2*(o.y - p.y), 2*(o.z - p.z)],
          [2*(c.x - p.x), 2*(c.y - p.y), 2*(c.z - p.z)],
          [2*(c.x - o.x), 2*(c.y - o.y), 2*(c.z - o.z)]
        ];
A[0][3] = b1;
A[1][3] = b2;
A[2][3] = b3;
console.log(A[0]);
console.log(A[1]);
console.log(A[2]);
console.log(A);
到目前为止,代码运行得还不错:

然后我在上面的代码后面添加这一行

var sol = gauss(A);
现在,当我在控制台上运行此命令时:


请注意,与第一个屏幕截图不同,这四个值被转换为NaN。为什么会发生这种情况,我该如何防止这种情况发生?

很可能是您的计算使数字太大而无法算作一个数字

您可能需要查看像bigint.js这样的库

但误差可能更多的是高斯函数。它看起来像是一个矩阵计算函数,但在某个地方,它在除以或乘以某个东西,并与它的值偏离了比例

即使高斯[1,1,1]也会产生一个NaN


我现在没有时间来处理这个问题,但是如果其他人以后没有这样做,我会看看我是否能帮上忙。

如果你认为错误在gauss()函数中,那么来源是:gauss做什么?请把这段代码贴出来,把gauss()源代码放在问题中。“这肯定来自于这个函数。”我把它贴在迈克尔·比茨的博客上。请看它并帮助我。这是相当肯定的问题是你的高斯,而不是js引擎,因为它设置的值为无限,如果你超过了限制(这是不同的btw)。高斯函数写入数组。检查每一点,这样你就可以调试代码了。查看我发布的控制台屏幕截图。我更新了答案。问题在于高斯函数。那里某处有个错误。如果以后没有人帮你,我会尽力帮你,但是现在我没有时间。我建议你把你的问题编辑成关于高斯函数的。是的,问题出在高斯()。我纠正了它。我非常感谢你@Michaeldibets。