2013-11-23 66 views
0
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/)。谢谢!当我刚刚访问数组时,为什么我会在这里获得NaN?

+0

解释你所期望的'变种Z =新阵列(1.0/INC);'产生....它是创造aarray 1000个eleemtns是所有不确定的。 Tru'console.log(z)'在你声明之后。怀疑这是你想要做的 – charlietfl

+0

@charlietfl:恩,1000条目。 –

回答

3

您正在创建包含1000个空值的数组,然后将额外元素推送到这些数组。你的阵列最终2000元长,而你遍历第一(空)1000

你并不需要声明的Javascript数组的长度,所以只用

var z = [] 
var y = [] 

会精细。

最后,你需要在最后一个循环改变你的数组索引

sum += y[i] - z[i]; 
+0

我认为这里也有一个问题,以及JavaScript如何做浮点数。我打赌你的款项不会是你想要的 – dbarnes

+0

也许,但他们不会是'NaN'至少 – Gareth

+0

@Gareth:我不知道我在想什么,当然'a.push(价值) '基本上是'a [a.length] = value'。但要明白,这并不是说其他​​的条目是“空”是很重要的,那就是*他们根本不存在*(因为这些是不是真的阵列)。 'var a = new Array(3); a.push(“x”);'给你一个有** 1 **条目和''长度'4'的数组。 –

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. 你不断地重新评估1.0/inc。我建议这样做,一次并将其存储在一个变量。

  2. 在JavaScript中,很少有任何理由来编写new Array(length)。只需使用var z = [];var y = [];这些阵列aren't really arrays at all,并根据需要,他们将“增长”(但同样,没有大量的内存重新分配,因为他们并不是真正的数组)。

0

在你的第三个循环,你试图使用浮点值x的一个索引yz。这将产生的结果undefined,并undefined - undefined评估为NaN

据推测,你的意思是使用i作为指标。

相关问题