var inc = .001;
var z = new Array(1.0/inc);
for (var x = 0.0; x < 1.0; x += inc) {
z.push(Math.cos(x));
}
var y = new Array(1.0/inc);
for (x = 0.0; x < 1.0; x += inc) {
y.push(1 - ((x * x) / 2) + ((x * x * x * x) / 24));
}
var sum = 0;
for (var i = 0; i < (1.0/inc); i++) {
sum += y[i] - z[i];
}
console.log(sum);
console.log(sum/(1.0/inc));
我对Javascript很新,但是这里的数组充满了浮点数,当我拿出差异并尝试打印它们时它会返回NaN。我在这里难过。这是代码(http://jsfiddle.net/2v7wu/)的小提琴。谢谢!
答案 0 :(得分:3)
您正在创建由1000个空值组成的数组,然后将额外元素推送到这些数组上。你的数组最终会有2000个元素,你可以迭代第一个(空)1000。
您不需要在Javascript中声明数组的长度,因此只需使用
var z = []
var y = []
会好的。
最后,您需要将最后一个循环中的数组索引更改为
sum += y[i] - z[i];
答案 1 :(得分:2)
因为您使用x
表示使用i
:
for (var i = 0; i < (1.0/inc); i++) {
sum += y[x] - z[x];
// ^------^--------- these should be i, not x
}
另见Gareth's point below,这与我在下面的注释#2有关。通过以初始长度开始然后使用push
,您不会将事物放在您认为自己的位置。 : - )
两个旁注:
您不断重新评估1.0/inc
。我建议一次并将其存储在变量中。
在JavaScript中,很少有任何理由来编写new Array(length)
。只需使用var z = [];
和var y = [];
这些数组aren't really arrays at all,它们将根据需要“增长”(但同样,没有大量内存重新分配,因为它们不是真正的数组)。
答案 2 :(得分:0)
在第三个循环中,您尝试使用浮点值x
作为y
和z
的索引。这会生成结果undefined
,undefined - undefined
评估为NaN
。
据推测,您打算使用i
作为索引。