IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 22, 2005, 8:04:28 AM (21 years ago)
Author:
magnier
Message:

added F32/F64 support to psPoly..EvalVector

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_rel8_b1/psLib/src/math/psPolynomial.c

    r5558 r5566  
    77*  polynomials.  It also contains a Gaussian functions.
    88*
    9 *  @version $Revision: 1.130.4.1 $ $Name: not supported by cvs2svn $
    10 *  @date $Date: 2005-11-18 03:05:52 $
     9*  @version $Revision: 1.130.4.1.2.1 $ $Name: not supported by cvs2svn $
     10*  @date $Date: 2005-11-22 18:04:28 $
    1111*
    1212*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    823823}
    824824
     825// this function must accept F32 and F64 input x vectors
    825826psVector *psPolynomial1DEvalVector(const psPolynomial1D *poly,
    826827                                   const psVector *x)
     
    828829    PS_ASSERT_POLY_NON_NULL(poly, NULL);
    829830    PS_ASSERT_VECTOR_NON_NULL(x, NULL);
    830     PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
     831    // PS_ASSERT_VECTOR_TYPE(x, PS_TYPE_F64, NULL);
    831832
    832833    psVector *tmp;
    833834
    834     tmp = psVectorAlloc(x->n, PS_TYPE_F64);
    835     for (unsigned int i=0;i<x->n;i++) {
    836         tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
    837     }
    838 
     835    switch (x->type) {
     836    case PS_TYPE_F64:
     837        tmp = psVectorAlloc(x->n, PS_TYPE_F64);
     838        for (unsigned int i=0;i<x->n;i++) {
     839            tmp->data.F64[i] = psPolynomial1DEval(poly, x->data.F64[i]);
     840        }
     841        break;
     842    case PS_TYPE_F32:
     843        tmp = psVectorAlloc(x->n, PS_TYPE_F32);
     844        for (unsigned int i=0;i<x->n;i++) {
     845            tmp->data.F32[i] = psPolynomial1DEval(poly, x->data.F32[i]);
     846        }
     847        break;
     848    default:
     849        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
     850        return (NULL);
     851    }
    839852    return(tmp);
    840853}
     
    858871}
    859872
     873// this function must support input data types of F32 and F64
     874// all input vectors data types must match (all F32 or all F64)
    860875psVector *psPolynomial2DEvalVector(const psPolynomial2D *poly,
    861876                                   const psVector *x,
     
    877892    }
    878893
    879     // Create output vector to return
    880     tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
    881 
    882     // Evaluate the polynomial at the specified points
    883     for (unsigned int i=0; i<vecLen; i++) {
    884         tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
    885     }
    886 
     894    switch (x->type) {
     895    case PS_TYPE_F32:
     896        if (y->type != x->type) {
     897            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
     898            return (NULL);
     899        }
     900
     901        // Create output vector to return
     902        tmp = psVectorAlloc(vecLen, PS_TYPE_F32);
     903
     904        // Evaluate the polynomial at the specified points
     905        for (unsigned int i=0; i<vecLen; i++) {
     906            tmp->data.F32[i] = psPolynomial2DEval(poly,x->data.F32[i],y->data.F32[i]);
     907        }
     908        break;
     909    case PS_TYPE_F64:
     910        if (y->type != x->type) {
     911            psError(PS_ERR_UNKNOWN, true, "type mismatch in data vectors");
     912            return (NULL);
     913        }
     914
     915        // Create output vector to return
     916        tmp = psVectorAlloc(vecLen, PS_TYPE_F64);
     917
     918        // Evaluate the polynomial at the specified points
     919        for (unsigned int i=0; i<vecLen; i++) {
     920            tmp->data.F64[i] = psPolynomial2DEval(poly,x->data.F64[i],y->data.F64[i]);
     921        }
     922        break;
     923    default:
     924        psError(PS_ERR_UNKNOWN, false, "invalid input data type.\n");
     925        return (NULL);
     926    }
    887927    // Return output vector
    888928    return(tmp);
Note: See TracChangeset for help on using the changeset viewer.