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