2017-12-15 22 views
0

私は関数sin(x)の値をドメインパラメータを入力して計算し、各x値のy値を計算するステップ数を計算しようとしています。私は、私がそれをコメントアウトするとページがうまく読み込まれるので、forループが問題であることを知っています。ただし、ループがアクティブな場合は、ページがクラッシュします。JavaScriptの正弦値をforループを使って計算しますが、クラッシュしています。どうして?

「私はPIのように非合理な番号をループしているのかもしれないと思った」と思った。さて、ドメインを[0,2]に変更して、数字がより「良い」ようにしましたが、私はまだ同じ問題を抱えています。

これが起こっている理由を調べようとしましたが、どこかで何らかの再帰が起こっているようです。私はどこが分からない。私が知る限り、コードは正しく見えます。私は十分な記憶や何かを持っていないためかもしれませんか?

ちなみに、私はHTML5キャンバスを使って楽しく実践するためのグラフ作成プログラムを作っているので、これをやっています。

//domain is the closed interval you want the function to be calculated on [a,b] 
//numSteps is the accuracy of your graph 

function sinGraph(domain, numSteps) { 
    //prepare x and y value arrays 
    var yVal = []; 
    var xVal = []; 

    //check if the function parameters are acceptable 
    if (domain[0] == domain[1] || numSteps <= 0) { 
    alert("Invalid inputs. Domain must be in format [a, b] where a does not equal b. Number of steps must be greater than zero."); 
    } else { 

    //define interval length 
    var intLength = Math.abs(domain[1] - domain[0]); 

    //find the number of steps 
    var stepSize = intLength/numSteps; 

    //calculate y values based on x values 
    //push x and y values into arrays based on numSteps 
    for (var i = domain[0]; i<=domain[1]; i+stepSize) { 
     var xTemp = i; 
     var yTemp = Math.sin(i); 
     xVal.push(xTemp); 
     yVal.push(yTemp); 
    } 

    //return x and y value arrays 
    return { 
     xVal: xVal, 
     yVal: yVal 
    }; 

    } 

} 

//test 
var graph = sinGraph([0, Math.PI], 20); 
alert(graph.yVal); 
+0

何クラッシュ?ブラウザ?あなたはエラーが発生しますか?どのようなエラー?すべての入力が失敗しますか? –

+0

ブラウザ(Chrome)がクラッシュします。 「このページを開くにはメモリが不足しています」と言っています。 –

+3

'for'ループの3番目の部分、' i + stepSize'は 'i'の値を決して変更しない可能性が高いです。私は 'i + = stepSize'を提案します – Forty3

答えて

1

forループの増分部分にだけマイナーなタイプミス:

//calculate y values based on x values 
//push x and y values into arrays based on numSteps 
for (var i = domain[0]; i<=domain[1]; i += stepSize) { 
    var xTemp = i; 
    var yTemp = Math.sin(i); 
    xVal.push(xTemp); 
    yVal.push(yTemp); 
} 
関連する問題