2012-02-27 3 views
0

x[i][j] - y[j]의 제곱근을 계산하기 위해이 코드를 실행 중이지만 나에게는 넌센스가 있습니다!C++의 sqrt 함수

 bool X[I][J]={}; //nodes 
    bool Y[J]={};  //medians 

    double denominator=0; 
    double miu=0; 
    outFile<< "denominator= " << denominator << endl; 
    for(i=0;i<I;i++) 
     for(j=0;j<J;j++) 
     { 
      denominator+=sqrt(double (X[i][j]-Y[j])); 
     } 
    outFile<< "denominator= " << denominator << endl; 

원래 값이지만 한 인쇄 -1.#IND 번째 인 제 outFile 인쇄 0.

+1

'X [I] [J]'&'Y [J]'는 로컬 변수이고 초기화되지 않았다면 이미 말도 안되는 것을 포함하고 있습니다. 그래서 * 당신은 뿌린 것과 거지 * 가치가없는 것을 거둬 들일 것입니다. –

+0

2 bool 값의 sqrt를 찾으려면 모든 스플 레이스가 있습니까? –

답변

2

을, 당신은 sqrt에서 다시 NaN (숫자)를 얻고 : 그냥 먼저 차의 절대 값을 검색 할 abs를 사용합니다.

NaN에 대한 설명은 this wikipedia page을 참조하십시오.

또한, XY는 논리 값의 배열, 그래서 X[i][j] - Y[j] 항상 1, 0, -1이 될 것입니다, 당신은 정말 sqrt 필요하지 않습니다. 이게 니가 원하는거야? 음수의 제곱근을 복용 할 수있다처럼

0

문제는 음수의 제곱근을 취할 수 없다는 것입니다. 즉, 허수를 얻습니다. 아마 어떤 점에서 X[i][j] - Y[j] 부정적인 것을 의미

bool X[I][J] = {}; // nodes 
bool Y[J] = {};  // medians 

double denominator = 0; 
double miu = 0; 
outFile << "denominator= " << denominator << endl; 
for(i = 0; i < I; i++) 
    for(j = 0; j < J; j++) 
    { 
     denominator += sqrt(double (abs(X[i][j]-Y[j]))); 
    } 
outFile << "denominator= " << denominator << endl; 
0

이 보이는 - 당신은 기본적으로 X와 Y 모두 부울 인수를위한 기회가되기 때문에 "숫자가 아닌"

0

을 의미하는 참조 값에 이르게 그것은 음수가되도록 sqrt()에 전달됩니다.

0

나는 당신이하는 것과 같은 결과를 얻지 못한다. 둘 다 제로가된다. 뺄셈의 제곱근뿐만 아니라 0이되어야하므로 두 배열에 대한

http://ideone.com/25ZPf

초기화 자는 모든 값을 0으로 설정해야합니다. 부울 배열이라는 사실은 값이 0.0으로 업 캐스팅되기 때문에 중요하지 않습니다.

게시 한 코드가 오류의 원인이되는 실제 코드가 아닙니다.