File: D:\TMTmethod\simulator\codegen\mex\testspline\sqrt.c1 /* 2 * sqrt.c 3 * 4 * Code generation for function 'sqrt' 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 "sqrt.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 void b_sqrt(creal_T *x) 28 { 29 real_T absxi; 30 real_T a; 31 real_T absxr; 32 if (x->im == 0.0) { 33 if (x->re < 0.0) { 34 absxi = 0.0; 35 a = muDoubleScalarSqrt(muDoubleScalarAbs(x->re)); 36 } else { 37 absxi = muDoubleScalarSqrt(x->re); 38 a = 0.0; 39 } 40 } else if (x->re == 0.0) { 41 if (x->im < 0.0) { 42 absxi = muDoubleScalarSqrt(-x->im / 2.0); 43 a = -absxi; 44 } else { 45 absxi = muDoubleScalarSqrt(x->im / 2.0); 46 a = absxi; 47 } 48 } else if (muDoubleScalarIsNaN(x->re) || muDoubleScalarIsNaN(x->im)) { 49 absxi = rtNaN; 50 a = rtNaN; 51 } else if (muDoubleScalarIsInf(x->im)) { 52 absxi = rtInf; 53 a = x->im; 54 } else if (muDoubleScalarIsInf(x->re)) { 55 if (x->re < 0.0) { 56 absxi = 0.0; 57 a = rtInf; 58 } else { 59 absxi = rtInf; 60 a = 0.0; 61 } 62 } else { 63 absxr = muDoubleScalarAbs(x->re); 64 absxi = muDoubleScalarAbs(x->im); 65 if ((absxr > 4.4942328371557893E+307) || (absxi > 4.4942328371557893E+307)) { 66 absxr *= 0.5; 67 absxi *= 0.5; 68 if (absxr < absxi) { 69 a = absxr / absxi; 70 absxi *= muDoubleScalarSqrt(a * a + 1.0); 71 } else if (absxr > absxi) { 72 absxi /= absxr; 73 absxi = muDoubleScalarSqrt(absxi * absxi + 1.0) * absxr; 74 } else if (muDoubleScalarIsNaN(absxi)) { 75 } else { 76 absxi = absxr * 1.4142135623730951; 77 } 78 if (absxi > absxr) { 79 absxi = muDoubleScalarSqrt(absxi) * muDoubleScalarSqrt(1.0 + absxr / absxi); 80 } else { 81 absxi = muDoubleScalarSqrt(absxi) * 1.4142135623730951; 82 } 83 } else { 84 if (absxr < absxi) { 85 a = absxr / absxi; 86 absxi *= muDoubleScalarSqrt(a * a + 1.0); 87 } else if (absxr > absxi) { 88 absxi /= absxr; 89 absxi = muDoubleScalarSqrt(absxi * absxi + 1.0) * absxr; 90 } else if (muDoubleScalarIsNaN(absxi)) { 91 } else { 92 absxi = absxr * 1.4142135623730951; 93 } 94 absxi = muDoubleScalarSqrt((absxi + absxr) * 0.5); 95 } 96 if (x->re > 0.0) { 97 a = 0.5 * (x->im / absxi); 98 } else { 99 if (x->im < 0.0) { 100 a = -absxi; 101 } else { 102 a = absxi; 103 } 104 absxi = 0.5 * (x->im / a); 105 } 106 } 107 x->re = absxi; 108 x->im = a; 109 } 110 /* End of code generation (sqrt.c) */ 111 |