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 #ifndef EIGEN_STEM_FUNCTION
00026 #define EIGEN_STEM_FUNCTION
00027
00031 template <typename Scalar>
00032 class StdStemFunctions
00033 {
00034 public:
00035
00037 static Scalar exp(Scalar x, int)
00038 {
00039 return std::exp(x);
00040 }
00041
00043 static Scalar cos(Scalar x, int n)
00044 {
00045 Scalar res;
00046 switch (n % 4) {
00047 case 0:
00048 res = std::cos(x);
00049 break;
00050 case 1:
00051 res = -std::sin(x);
00052 break;
00053 case 2:
00054 res = -std::cos(x);
00055 break;
00056 case 3:
00057 res = std::sin(x);
00058 break;
00059 }
00060 return res;
00061 }
00062
00064 static Scalar sin(Scalar x, int n)
00065 {
00066 Scalar res;
00067 switch (n % 4) {
00068 case 0:
00069 res = std::sin(x);
00070 break;
00071 case 1:
00072 res = std::cos(x);
00073 break;
00074 case 2:
00075 res = -std::sin(x);
00076 break;
00077 case 3:
00078 res = -std::cos(x);
00079 break;
00080 }
00081 return res;
00082 }
00083
00085 static Scalar cosh(Scalar x, int n)
00086 {
00087 Scalar res;
00088 switch (n % 2) {
00089 case 0:
00090 res = std::cosh(x);
00091 break;
00092 case 1:
00093 res = std::sinh(x);
00094 break;
00095 }
00096 return res;
00097 }
00098
00100 static Scalar sinh(Scalar x, int n)
00101 {
00102 Scalar res;
00103 switch (n % 2) {
00104 case 0:
00105 res = std::sinh(x);
00106 break;
00107 case 1:
00108 res = std::cosh(x);
00109 break;
00110 }
00111 return res;
00112 }
00113
00114 };
00115
00116 #endif // EIGEN_STEM_FUNCTION