2017-12-15 13 views
0

그래서 도메인 매개 변수를 입력하고 각각의 x 값에 대해 y 값을 계산하는 단계를 통해 sin (x) 함수의 값을 계산하려고합니다. 나는 for 루프가 문제라고 생각한다. 왜냐하면 내가 주석 처리 할 때 페이지가 잘로드되기 때문이다. 그러나 루프가 활성화되어 있으면 페이지가 충돌합니다.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' 루프의 세 번째 부분 인'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); 
}