Changeset 12431 for trunk/psLib/src/math/psUnaryOp.c
- Timestamp:
- Mar 13, 2007, 2:39:51 PM (19 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psUnaryOp.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psUnaryOp.c
r10999 r12431 31 31 * @author Robert DeSonia, MHPCC 32 32 * 33 * @version $Revision: 1.1 3$ $Name: not supported by cvs2svn $34 * @date $Date: 2007-0 1-09 22:38:53$33 * @version $Revision: 1.14 $ $Name: not supported by cvs2svn $ 34 * @date $Date: 2007-03-14 00:39:50 $ 35 35 * 36 36 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 45 45 ******************************************************************************/ 46 46 #include <string.h> 47 #include <complex.h>48 47 #include <math.h> 49 48 #include <stdint.h> … … 123 122 #define UNARY_TYPE(DIM,OUT,IN,OP) \ 124 123 switch (IN->type) { \ 124 case PS_TYPE_U8: \ 125 DIM(OUT,IN,OP,U8); \ 126 break; \ 127 case PS_TYPE_U16: \ 128 DIM(OUT,IN,OP,U16); \ 129 break; \ 130 case PS_TYPE_U32: \ 131 DIM(OUT,IN,OP,U32); \ 132 break; \ 133 case PS_TYPE_U64: \ 134 DIM(OUT,IN,OP,U64); \ 135 break; \ 136 case PS_TYPE_S8: \ 137 DIM(OUT,IN,OP,S8); \ 138 break; \ 139 case PS_TYPE_S16: \ 140 DIM(OUT,IN,OP,S16); \ 141 break; \ 125 142 case PS_TYPE_S32: \ 126 143 DIM(OUT,IN,OP,S32); \ 127 144 break; \ 145 case PS_TYPE_S64: \ 146 DIM(OUT,IN,OP,S64); \ 147 break; \ 128 148 case PS_TYPE_F32: \ 129 149 DIM(OUT,IN,OP,F32); \ … … 131 151 case PS_TYPE_F64: \ 132 152 DIM(OUT,IN,OP,F64); \ 133 break; \134 case PS_TYPE_C32: \135 DIM(OUT,IN,OP,C32); \136 break; \137 case PS_TYPE_S8: \138 DIM(OUT,IN,OP,C32); \139 break; \140 case PS_TYPE_U8: \141 DIM(OUT,IN,OP,C32); \142 break; \143 case PS_TYPE_S16: \144 DIM(OUT,IN,OP,C32); \145 break; \146 case PS_TYPE_U16: \147 DIM(OUT,IN,OP,C32); \148 break; \149 case PS_TYPE_U32: \150 DIM(OUT,IN,OP,C32); \151 break; \152 case PS_TYPE_S64: \153 DIM(OUT,IN,OP,C32); \154 break; \155 case PS_TYPE_U64: \156 DIM(OUT,IN,OP,C32); \157 break; \158 case PS_TYPE_C64: \159 DIM(OUT,IN,OP,C32); \160 153 break; \ 161 154 default: { \ … … 174 167 #define UNARY_OP(DIM,OUT,IN,OP) \ 175 168 if(!strncmp(OP, "abs", 3)) { \ 176 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 177 UNARY_TYPE(DIM,OUT,IN,cabs((double complex)*i1)); \ 178 } else { \ 179 UNARY_TYPE(DIM,OUT,IN,fabs((double)*i1)); \ 180 } \ 169 UNARY_TYPE(DIM,OUT,IN,fabs((double)*i1)); \ 181 170 } else if(!strncmp(OP, "sqrt", 4)) { \ 182 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 183 UNARY_TYPE(DIM,OUT,IN,csqrt((double complex)*i1)); \ 184 } else { \ 185 UNARY_TYPE(DIM,OUT,IN,sqrt((double)*i1)); \ 186 } \ 171 UNARY_TYPE(DIM,OUT,IN,sqrt((double)*i1)); \ 187 172 } else if(!strncmp(OP, "exp", 3)) { \ 188 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 189 UNARY_TYPE(DIM,OUT,IN,cexp((double complex)*i1)); \ 190 } else { \ 191 UNARY_TYPE(DIM,OUT,IN,exp((double)*i1)); \ 192 } \ 173 UNARY_TYPE(DIM,OUT,IN,exp((double)*i1)); \ 193 174 } else if(!strncmp(OP, "ln", 2)) { \ 194 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 195 UNARY_TYPE(DIM,OUT,IN,clog((double complex)*i1)); \ 196 } else { \ 197 UNARY_TYPE(DIM,OUT,IN,log((double)*i1)); \ 198 } \ 175 UNARY_TYPE(DIM,OUT,IN,log((double)*i1)); \ 199 176 } else if(!strncmp(OP, "ten", 3)) { \ 200 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 201 UNARY_TYPE(DIM,OUT,IN,cpow(10.0,(double complex)*i1)); \ 202 } else { \ 203 UNARY_TYPE(DIM,OUT,IN,pow(10.0,(double)*i1)); \ 204 } \ 177 UNARY_TYPE(DIM,OUT,IN,pow(10.0,(double)*i1)); \ 205 178 } else if(!strncmp(OP, "log", 3)) { \ 206 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 207 UNARY_TYPE(DIM,OUT,IN,clog((double complex)*i1)/log(10.0)); \ 208 } else { \ 209 UNARY_TYPE(DIM,OUT,IN,log10((double)*i1)); \ 210 } \ 179 UNARY_TYPE(DIM,OUT,IN,log10((double)*i1)); \ 211 180 } else if(!strncmp(OP, "sin", 3)) { \ 212 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 213 UNARY_TYPE(DIM,OUT,IN,csin((double complex)*i1)); \ 214 } else { \ 215 UNARY_TYPE(DIM,OUT,IN,sin((double)*i1)); \ 216 } \ 181 UNARY_TYPE(DIM,OUT,IN,sin((double)*i1)); \ 217 182 } else if(!strncmp(OP, "dsin", 4)) { \ 218 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 219 UNARY_TYPE(DIM,OUT,IN,csin((double complex)*i1*D2R)); \ 220 } else { \ 221 UNARY_TYPE(DIM,OUT,IN,sin((double)*i1*D2R)); \ 222 } \ 183 UNARY_TYPE(DIM,OUT,IN,sin((double)*i1*D2R)); \ 223 184 } else if(!strncmp(OP, "cos", 3)) { \ 224 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 225 UNARY_TYPE(DIM,OUT,IN,ccos((double complex)*i1)); \ 226 } else { \ 227 UNARY_TYPE(DIM,OUT,IN,cos((double)*i1)); \ 228 } \ 185 UNARY_TYPE(DIM,OUT,IN,cos((double)*i1)); \ 229 186 } else if(!strncmp(OP, "dcos", 4)) { \ 230 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 231 UNARY_TYPE(DIM,OUT,IN,ccos((double complex)*i1*D2R)); \ 232 } else { \ 233 UNARY_TYPE(DIM,OUT,IN,cos((double)*i1*D2R)); \ 234 } \ 187 UNARY_TYPE(DIM,OUT,IN,cos((double)*i1*D2R)); \ 235 188 } else if(!strncmp(OP, "tan", 3)) { \ 236 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 237 UNARY_TYPE(DIM,OUT,IN,ctan((double complex)*i1)); \ 238 } else { \ 239 UNARY_TYPE(DIM,OUT,IN,tan((double)*i1)); \ 240 } \ 189 UNARY_TYPE(DIM,OUT,IN,tan((double)*i1)); \ 241 190 } else if(!strncmp(OP, "dtan", 4)) { \ 242 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 243 UNARY_TYPE(DIM,OUT,IN,ctan((double complex)*i1*D2R)); \ 244 } else { \ 245 UNARY_TYPE(DIM,OUT,IN,tan((double)*i1*D2R)); \ 246 } \ 191 UNARY_TYPE(DIM,OUT,IN,tan((double)*i1*D2R)); \ 247 192 } else if(!strncmp(OP, "asin", 4)) { \ 248 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 249 UNARY_TYPE(DIM,OUT,IN,casin((double complex)*i1)); \ 250 } else { \ 251 UNARY_TYPE(DIM,OUT,IN,asin((double)*i1)); \ 252 } \ 193 UNARY_TYPE(DIM,OUT,IN,asin((double)*i1)); \ 253 194 } else if(!strncmp(OP, "dasin", 5)) { \ 254 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 255 UNARY_TYPE(DIM,OUT,IN,R2D*casin((double complex)*i1)); \ 256 } else { \ 257 UNARY_TYPE(DIM,OUT,IN,(R2D*asin((double)*i1))); \ 258 } \ 195 UNARY_TYPE(DIM,OUT,IN,(R2D*asin((double)*i1))); \ 259 196 } else if(!strncmp(OP, "acos", 4)) { \ 260 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 261 UNARY_TYPE(DIM,OUT,IN,cacos((double complex)*i1)); \ 262 } else { \ 263 UNARY_TYPE(DIM,OUT,IN,acos((double)*i1)); \ 264 } \ 197 UNARY_TYPE(DIM,OUT,IN,acos((double)*i1)); \ 265 198 } else if(!strncmp(OP, "dacos", 5)) { \ 266 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 267 UNARY_TYPE(DIM,OUT,IN,R2D*cacos((double complex)*i1)); \ 268 } else { \ 269 UNARY_TYPE(DIM,OUT,IN,R2D*acos((double)*i1)); \ 270 } \ 199 UNARY_TYPE(DIM,OUT,IN,R2D*acos((double)*i1)); \ 271 200 } else if(!strncmp(OP, "atan", 4)) { \ 272 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 273 UNARY_TYPE(DIM,OUT,IN,catan((double complex)*i1)); \ 274 } else { \ 275 UNARY_TYPE(DIM,OUT,IN,atan((double)*i1)); \ 276 } \ 201 UNARY_TYPE(DIM,OUT,IN,atan((double)*i1)); \ 277 202 } else if(!strncmp(OP, "datan", 5)) { \ 278 if(PS_IS_PSELEMTYPE_COMPLEX(IN->type)) { \ 279 UNARY_TYPE(DIM,OUT,IN,R2D*catan((double complex)*i1)); \ 280 } else { \ 281 UNARY_TYPE(DIM,OUT,IN,R2D*atan((double)*i1)); \ 282 } \ 203 UNARY_TYPE(DIM,OUT,IN,R2D*atan((double)*i1)); \ 283 204 } else { \ 284 205 psError(PS_ERR_BAD_PARAMETER_VALUE, true, _("Specified operation, %s, is not supported."), OP); \
Note:
See TracChangeset
for help on using the changeset viewer.
