Pregunta
Estoy ejecutando este código para calcular la raíz cuadrada de x[i][j] - y[j]
pero me da que tonterías!
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;
La primera outFile
imprime 0 que es el valor original pero el segundo impresiones -1.#IND
.
Solución
Que significa que, probablemente, en algún momento X[i][j] - Y[j]
fue negativo, y se está obteniendo un NaN (no un número) de vuelta de sqrt
.
Ver esta página de la wikipedia para una explicación de los Nan.
También, X
y Y
son arrays de booleanos, así X[i][j] - Y[j]
siempre será 1, 0 o -1, y usted realmente no necesita la sqrt
.Es esto lo que quieres?
Otros consejos
El problema es que no puede tomar la raíz cuadrada de un número negativo: obtiene un número imaginario.Simplemente use abs
para recuperar el valor absoluto de la diferencia primero:
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;
Parece que puede estar tomando la raíz cuadrada de un número negativo: lleva al valor que ve que esencialmente significa "no un número"
Dado que tanto x como y son bool, hay posibilidades de que se pase el argumento a SQRT () para ser negativo.
No obtengo los mismos resultados que hagas, tengo cero para ambos.
Los inicializadores para ambas matrices deben establecer todos los valores a cero, por lo que la raíz cuadrada de la restitución también debe ser cero.El hecho de que son matrices booleanas no deben importar, ya que los valores se venderán a 0.0.
Algo me dice que el código que publicó no es el código real que está causando el error.