IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 14, 2010, 4:24:13 PM (16 years ago)
Author:
eugene
Message:

return a nan, not an abort, on a nan result

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/math/psMinimizeLMM.c

    r24089 r26951  
    9999
    100100// XXX check that the GJ solver works:
    101 # if (TESTGJ) 
     101# if (TESTGJ)
    102102    psImage *out = psImageAlloc (alpha->numRows, alpha->numCols, PS_TYPE_F32);
    103103    for (int oy = 0; oy < out->numRows; oy++) {
    104         for (int ox = 0; ox < out->numCols; ox++) {
    105             float value = 0;
    106             for (int i = 0; i < alpha->numCols; i++) {
    107                 value += alpha->data.F32[i][ox]*Alpha->data.F32[oy][i];
    108             }
    109             out->data.F32[oy][ox] = value;
    110         }
     104        for (int ox = 0; ox < out->numCols; ox++) {
     105            float value = 0;
     106            for (int i = 0; i < alpha->numCols; i++) {
     107                value += alpha->data.F32[i][ox]*Alpha->data.F32[oy][i];
     108            }
     109            out->data.F32[oy][ox] = value;
     110        }
    111111    }
    112112
    113113    psVector *vect = psVectorAlloc (beta->n, PS_TYPE_F32);
    114114    for (int oy = 0; oy < vect->n; oy++) {
    115         float value = 0;
    116         for (int i = 0; i < alpha->numCols; i++) {
    117             value += alpha->data.F32[oy][i]*Beta->data.F32[i];
    118         }
    119         vect->data.F32[oy] = value;
    120     }
    121    
     115        float value = 0;
     116        for (int i = 0; i < alpha->numCols; i++) {
     117            value += alpha->data.F32[oy][i]*Beta->data.F32[i];
     118        }
     119        vect->data.F32[oy] = value;
     120    }
     121
    122122    psFree (out);
    123123    psFree (vect);
     
    223223    if (isnan(chisq)) {
    224224        psTrace ("psLib.math", 5, "psMinLM_SetABX() returned a NAN chisq.\n");
    225         psVectorInit (delta, NAN);
     225        psVectorInit (delta, NAN);
    226226        retValue = false;
    227227    }
     
    238238    if (!status) {
    239239        psTrace ("psLib.math", 5, "psMinLM_GuessABP() returned FALSE.\n");
    240         psVectorInit (delta, NAN);
     240        psVectorInit (delta, NAN);
    241241        retValue = false;
    242242    }
     
    301301    PS_ASSERT_VECTOR_NON_NULL(dy, NAN);
    302302
    303     PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, false);
     303    PS_ASSERT_VECTOR_TYPE(params, PS_TYPE_F32, NAN);
    304304    if (paramMask) {
    305         PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_VECTOR_MASK, false);
     305        PS_ASSERT_VECTOR_TYPE(paramMask, PS_TYPE_VECTOR_MASK, NAN);
    306306    }
    307307
     
    325325        chisq += PS_SQR(delta) * dy->data.F32[i];
    326326
    327         assert (!isnan(dy->data.F32[i]));
    328         assert (!isnan(delta));
    329         assert (!isnan(chisq));
     327        if (isnan(dy->data.F32[i])) return NAN;
     328        if (isnan(delta)) return NAN;
     329        if (isnan(chisq)) return NAN;
    330330
    331331        // we track alpha,beta and params,deriv separately
Note: See TracChangeset for help on using the changeset viewer.