Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 #ifndef HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H
00030 #define HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H
00031 
00032 #include <limits>
00033 #include <cmath>
00034 
00035 typedef double real_T;
00036 typedef uint32_t int32_T;
00037 typedef bool boolean_T;
00038 
00039 static const real_T rtInf = std::numeric_limits<real_T>::infinity();
00040 static inline boolean_T rtIsInf(real_T value)
00041 {
00042   return std::isinf(value);
00043 }
00044 
00045 static const real_T rtNaN = std::numeric_limits<real_T>::quiet_NaN();
00046 static inline boolean_T rtIsNaN(real_T value)
00047 {
00048   return std::isnan(value);
00049 }
00050 
00051 static real_T rt_powd_snf(real_T u0, real_T u1)
00052 {
00053   real_T y;
00054   real_T d0;
00055   real_T d1;
00056   if (rtIsNaN(u0) || rtIsNaN(u1)) {
00057     y = rtNaN;
00058   } else {
00059     d0 = fabs(u0);
00060     d1 = fabs(u1);
00061     if (rtIsInf(u1)) {
00062       if (d0 == 1.0) {
00063         y = rtNaN;
00064       } else if (d0 > 1.0) {
00065         if (u1 > 0.0) {
00066           y = rtInf;
00067         } else {
00068           y = 0.0;
00069         }
00070       } else if (u1 > 0.0) {
00071         y = 0.0;
00072       } else {
00073         y = rtInf;
00074       }
00075     } else if (d1 == 0.0) {
00076       y = 1.0;
00077     } else if (d1 == 1.0) {
00078       if (u1 > 0.0) {
00079         y = u0;
00080       } else {
00081         y = 1.0 / u0;
00082       }
00083     } else if (u1 == 2.0) {
00084       y = u0 * u0;
00085     } else if ((u1 == 0.5) && (u0 >= 0.0)) {
00086       y = sqrt(u0);
00087     } else if ((u0 < 0.0) && (u1 > floor(u1))) {
00088       y = rtNaN;
00089     } else {
00090       y = pow(u0, u1);
00091     }
00092   }
00093 
00094   return y;
00095 }
00096 
00097 #endif // HECTOR_QUADROTOR_MODEL_MATLAB_HELPERS_H