File: D:\TMTmethod\simulator\codegen\mex\testspline\power.c

    1   /*
    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