2013-11-23 109 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作爲指標。

相關問題