File: D:\TMTmethod\simulator\codegen\mex\testspline\power.c1 /* 2 * power.c 3 * 4 * Code generation for function 'power' 5 * 6 * C source code generated on: Thu Aug 30 14:03:55 2012 7 * 8 */ 9 10 /* Include files */ 11 #include "rt_nonfinite.h" 12 #include "testspline.h" 13 #include "power.h" 14 15 /* Type Definitions */ 16 17 /* Named Constants */ 18 19 /* Variable Declarations */ 20 21 /* Variable Definitions */ 22 23 /* Function Declarations */ 24 25 /* Function Definitions */ 26 27 creal_T power(const creal_T a, real_T b) 28 { 29 creal_T y; 30 real_T t_re; 31 real_T t_im; 32 int8_T r; 33 if ((a.im == 0.0) && (a.re >= 0.0)) { 34 y.re = muDoubleScalarPower(a.re, b); 35 y.im = 0.0; 36 } else if ((a.re == 0.0) && (muDoubleScalarFloor(b) == b) && (muDoubleScalarAbs(b) <= 9.007199254740991E+15)) { 37 t_re = muDoubleScalarPower(a.im, b); 38 t_im = b - muDoubleScalarFloor(b / 4.0) * 4.0; 39 t_im = t_im < 0.0 ? muDoubleScalarCeil(t_im - 0.5) : muDoubleScalarFloor(t_im + 0.5); 40 if (t_im < 128.0) { 41 if (t_im >= -128.0) { 42 r = (int8_T)t_im; 43 } else { 44 r = MIN_int8_T; 45 } 46 } else if (t_im >= 128.0) { 47 r = MAX_int8_T; 48 } else { 49 r = 0; 50 } 51 if (r == 3) { 52 y.re = 0.0; 53 y.im = -t_re; 54 } else if (r == 2) { 55 y.re = -t_re; 56 y.im = 0.0; 57 } else if (r == 1) { 58 y.re = 0.0; 59 y.im = t_re; 60 } else { 61 y.re = t_re; 62 y.im = 0.0; 63 } 64 } else { 65 t_re = a.re; 66 t_im = a.im; 67 if ((a.im == 0.0) && muDoubleScalarIsNaN(a.re)) { 68 } else if ((muDoubleScalarAbs(a.re) > 8.9884656743115785E+307) || (muDoubleScalarAbs(a.im) > 8.9884656743115785E+307)) { 69 t_re = muDoubleScalarAbs(a.re / 2.0); 70 t_im = muDoubleScalarAbs(a.im / 2.0); 71 if (t_re < t_im) { 72 t_re /= t_im; 73 t_im *= muDoubleScalarSqrt(t_re * t_re + 1.0); 74 } else if (t_re > t_im) { 75 t_im /= t_re; 76 t_im = muDoubleScalarSqrt(t_im * t_im + 1.0) * t_re; 77 } else if (muDoubleScalarIsNaN(t_im)) { 78 } else { 79 t_im = t_re * 1.4142135623730951; 80 } 81 t_re = muDoubleScalarLog(t_im) + 0.69314718055994529; 82 t_im = muDoubleScalarAtan2(a.im, a.re); 83 } else { 84 t_re = muDoubleScalarAbs(a.re); 85 t_im = muDoubleScalarAbs(a.im); 86 if (t_re < t_im) { 87 t_re /= t_im; 88 t_im *= muDoubleScalarSqrt(t_re * t_re + 1.0); 89 } else if (t_re > t_im) { 90 t_im /= t_re; 91 t_im = muDoubleScalarSqrt(t_im * t_im + 1.0) * t_re; 92 } else if (muDoubleScalarIsNaN(t_im)) { 93 } else { 94 t_im = t_re * 1.4142135623730951; 95 } 96 t_re = muDoubleScalarLog(t_im); 97 t_im = muDoubleScalarAtan2(a.im, a.re); 98 } 99 t_re *= b; 100 t_im *= b; 101 t_re = muDoubleScalarExp(t_re); 102 y.re = t_re * muDoubleScalarCos(t_im); 103 y.im = t_re * muDoubleScalarSin(t_im); 104 } 105 return y; 106 } 107 /* End of code generation (power.c) */ 108 |