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.

¿Fue útil?

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.

http://ideone.com/25zpf

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top