IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 10246


Ignore:
Timestamp:
Nov 28, 2006, 2:49:21 PM (20 years ago)
Author:
Paul Price
Message:

Adding sqrt.
Explicitly casting values within functions to avoid endian effects.

File:
1 edited

Legend:

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

    r9552 r10246  
    1616 *      Power of 10 (ten)
    1717 *      Log (log)
     18 *      Square root (sqrt)
    1819 *      Sine (sin or dsin)
    1920 *      Cosine (cos or dcos)
     
    3031 *  @author Robert DeSonia, MHPCC
    3132 *
    32  *  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
    33  *  @date $Date: 2006-10-14 00:02:31 $
     33 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
     34 *  @date $Date: 2006-11-29 00:49:21 $
    3435 *
    3536 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    170171if(!strncmp(OP, "abs", 3)) { \
    171172    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    172         UNARY_TYPE(DIM,OUT,IN,cabs(*i1)); \
    173     } else { \
    174         UNARY_TYPE(DIM,OUT,IN,fabs(*i1)); \
     173        UNARY_TYPE(DIM,OUT,IN,cabs((double complex)*i1)); \
     174    } else { \
     175        UNARY_TYPE(DIM,OUT,IN,fabs((double)*i1)); \
     176    } \
     177} else if(!strncmp(OP, "sqrt", 4)) { \
     178    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
     179        UNARY_TYPE(DIM,OUT,IN,csqrt((double complex)*i1)); \
     180    } else { \
     181        UNARY_TYPE(DIM,OUT,IN,sqrt((double)*i1)); \
    175182    } \
    176183} else if(!strncmp(OP, "exp", 3)) { \
    177184    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    178         UNARY_TYPE(DIM,OUT,IN,cexp(*i1)); \
    179     } else { \
    180         UNARY_TYPE(DIM,OUT,IN,exp(*i1)); \
     185        UNARY_TYPE(DIM,OUT,IN,cexp((double complex)*i1)); \
     186    } else { \
     187        UNARY_TYPE(DIM,OUT,IN,exp((double)*i1)); \
    181188    } \
    182189} else if(!strncmp(OP, "ln", 2)) { \
    183190    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    184         UNARY_TYPE(DIM,OUT,IN,clog(*i1)); \
    185     } else { \
    186         UNARY_TYPE(DIM,OUT,IN,log(*i1)); \
     191        UNARY_TYPE(DIM,OUT,IN,clog((double complex)*i1)); \
     192    } else { \
     193        UNARY_TYPE(DIM,OUT,IN,log((double)*i1)); \
    187194    } \
    188195} else if(!strncmp(OP, "ten", 3)) { \
    189196    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    190         UNARY_TYPE(DIM,OUT,IN,cpow(10.0,*i1)); \
    191     } else { \
    192         UNARY_TYPE(DIM,OUT,IN,pow(10.0,*i1)); \
     197        UNARY_TYPE(DIM,OUT,IN,cpow(10.0,(double complex)*i1)); \
     198    } else { \
     199        UNARY_TYPE(DIM,OUT,IN,pow(10.0,(double)*i1)); \
    193200    } \
    194201} else if(!strncmp(OP, "log", 3)) { \
    195202    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    196         UNARY_TYPE(DIM,OUT,IN,clog(*i1)/log(10.0)); \
    197     } else { \
    198         UNARY_TYPE(DIM,OUT,IN,log10(*i1)); \
     203        UNARY_TYPE(DIM,OUT,IN,clog((double complex)*i1)/log(10.0)); \
     204    } else { \
     205        UNARY_TYPE(DIM,OUT,IN,log10((double)*i1)); \
    199206    } \
    200207} else if(!strncmp(OP, "sin", 3)) { \
    201208    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    202         UNARY_TYPE(DIM,OUT,IN,csin(*i1)); \
    203     } else { \
    204         UNARY_TYPE(DIM,OUT,IN,sin(*i1)); \
     209        UNARY_TYPE(DIM,OUT,IN,csin((double complex)*i1)); \
     210    } else { \
     211        UNARY_TYPE(DIM,OUT,IN,sin((double)*i1)); \
    205212    } \
    206213} else if(!strncmp(OP, "dsin", 4)) { \
    207214    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    208         UNARY_TYPE(DIM,OUT,IN,csin(*i1*D2R)); \
    209     } else { \
    210         UNARY_TYPE(DIM,OUT,IN,sin(*i1*D2R)); \
     215        UNARY_TYPE(DIM,OUT,IN,csin((double complex)*i1*D2R)); \
     216    } else { \
     217        UNARY_TYPE(DIM,OUT,IN,sin((double)*i1*D2R)); \
    211218    } \
    212219} else if(!strncmp(OP, "cos", 3)) { \
    213220    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    214         UNARY_TYPE(DIM,OUT,IN,ccos(*i1)); \
    215     } else { \
    216         UNARY_TYPE(DIM,OUT,IN,cos(*i1)); \
     221        UNARY_TYPE(DIM,OUT,IN,ccos((double complex)*i1)); \
     222    } else { \
     223        UNARY_TYPE(DIM,OUT,IN,cos((double)*i1)); \
    217224    } \
    218225} else if(!strncmp(OP, "dcos", 4)) { \
    219226    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    220         UNARY_TYPE(DIM,OUT,IN,ccos(*i1*D2R)); \
    221     } else { \
    222         UNARY_TYPE(DIM,OUT,IN,cos(*i1*D2R)); \
     227        UNARY_TYPE(DIM,OUT,IN,ccos((double complex)*i1*D2R)); \
     228    } else { \
     229        UNARY_TYPE(DIM,OUT,IN,cos((double)*i1*D2R)); \
    223230    } \
    224231} else if(!strncmp(OP, "tan", 3)) { \
    225232    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    226         UNARY_TYPE(DIM,OUT,IN,ctan(*i1)); \
    227     } else { \
    228         UNARY_TYPE(DIM,OUT,IN,tan(*i1)); \
     233        UNARY_TYPE(DIM,OUT,IN,ctan((double complex)*i1)); \
     234    } else { \
     235        UNARY_TYPE(DIM,OUT,IN,tan((double)*i1)); \
    229236    } \
    230237} else if(!strncmp(OP, "dtan", 4)) { \
    231238    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    232         UNARY_TYPE(DIM,OUT,IN,ctan(*i1*D2R)); \
    233     } else { \
    234         UNARY_TYPE(DIM,OUT,IN,tan(*i1*D2R)); \
     239        UNARY_TYPE(DIM,OUT,IN,ctan((double complex)*i1*D2R)); \
     240    } else { \
     241        UNARY_TYPE(DIM,OUT,IN,tan((double)*i1*D2R)); \
    235242    } \
    236243} else if(!strncmp(OP, "asin", 4)) { \
    237244    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    238         UNARY_TYPE(DIM,OUT,IN,casin(*i1)); \
    239     } else { \
    240         UNARY_TYPE(DIM,OUT,IN,asin(*i1)); \
     245        UNARY_TYPE(DIM,OUT,IN,casin((double complex)*i1)); \
     246    } else { \
     247        UNARY_TYPE(DIM,OUT,IN,asin((double)*i1)); \
    241248    } \
    242249} else if(!strncmp(OP, "dasin", 5)) { \
    243250    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    244         UNARY_TYPE(DIM,OUT,IN,R2D*casin(*i1)); \
    245     } else if(PS_IS_PSELEMTYPE_INT(IN->type)) { \
    246         UNARY_TYPE(DIM,OUT,IN,(R2D*asin(*i1))); \
    247     } else { \
    248         UNARY_TYPE(DIM,OUT,IN,(R2D*asin(*i1))); \
     251        UNARY_TYPE(DIM,OUT,IN,R2D*casin((double complex)*i1)); \
     252    } else { \
     253        UNARY_TYPE(DIM,OUT,IN,(R2D*asin((double)*i1))); \
    249254    } \
    250255} else if(!strncmp(OP, "acos", 4)) { \
    251256    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    252         UNARY_TYPE(DIM,OUT,IN,cacos(*i1)); \
    253     } else { \
    254         UNARY_TYPE(DIM,OUT,IN,acos(*i1)); \
     257        UNARY_TYPE(DIM,OUT,IN,cacos((double complex)*i1)); \
     258    } else { \
     259        UNARY_TYPE(DIM,OUT,IN,acos((double)*i1)); \
    255260    } \
    256261} else if(!strncmp(OP, "dacos", 5)) { \
    257262    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    258         UNARY_TYPE(DIM,OUT,IN,R2D*cacos(*i1)); \
    259     } else if(PS_IS_PSELEMTYPE_INT(IN->type)) { \
    260         UNARY_TYPE(DIM,OUT,IN,(R2D*acos(*i1))); \
    261     } else { \
    262         UNARY_TYPE(DIM,OUT,IN,R2D*acos(*i1)); \
     263        UNARY_TYPE(DIM,OUT,IN,R2D*cacos((double complex)*i1)); \
     264    } else { \
     265        UNARY_TYPE(DIM,OUT,IN,R2D*acos((double)*i1)); \
    263266    } \
    264267} else if(!strncmp(OP, "atan", 4)) { \
    265268    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    266         UNARY_TYPE(DIM,OUT,IN,catan(*i1)); \
    267     } else { \
    268         UNARY_TYPE(DIM,OUT,IN,atan(*i1)); \
     269        UNARY_TYPE(DIM,OUT,IN,catan((double complex)*i1)); \
     270    } else { \
     271        UNARY_TYPE(DIM,OUT,IN,atan((double)*i1)); \
    269272    } \
    270273} else if(!strncmp(OP, "datan", 5)) { \
    271274    if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \
    272         UNARY_TYPE(DIM,OUT,IN,R2D*catan(*i1)); \
    273     } else { \
    274         UNARY_TYPE(DIM,OUT,IN,R2D*atan(*i1)); \
     275        UNARY_TYPE(DIM,OUT,IN,R2D*catan((double complex)*i1)); \
     276    } else { \
     277        UNARY_TYPE(DIM,OUT,IN,R2D*atan((double)*i1)); \
    275278    } \
    276279} else { \
Note: See TracChangeset for help on using the changeset viewer.