#ifndef EIGEN_STEM_FUNCTION
#define EIGEN_STEM_FUNCTION
#include "./InternalHeaderCheck.h"
namespace Eigen {
namespace internal {
template <typename Scalar>
Scalar stem_function_exp(Scalar x, int) {
using std::exp;
return exp(x);
}
template <typename Scalar>
Scalar stem_function_cos(Scalar x, int n) {
using std::cos;
using std::sin;
Scalar res;
switch (n % 4) {
case 0:
res = std::cos(x);
break;
case 1:
res = -std::sin(x);
break;
case 2:
res = -std::cos(x);
break;
case 3:
res = std::sin(x);
break;
}
return res;
}
template <typename Scalar>
Scalar stem_function_sin(Scalar x, int n) {
using std::cos;
using std::sin;
Scalar res;
switch (n % 4) {
case 0:
res = std::sin(x);
break;
case 1:
res = std::cos(x);
break;
case 2:
res = -std::sin(x);
break;
case 3:
res = -std::cos(x);
break;
}
return res;
}
template <typename Scalar>
Scalar stem_function_cosh(Scalar x, int n) {
using std::cosh;
using std::sinh;
Scalar res;
switch (n % 2) {
case 0:
res = std::cosh(x);
break;
case 1:
res = std::sinh(x);
break;
}
return res;
}
template <typename Scalar>
Scalar stem_function_sinh(Scalar x, int n) {
using std::cosh;
using std::sinh;
Scalar res;
switch (n % 2) {
case 0:
res = std::sinh(x);
break;
case 1:
res = std::cosh(x);
break;
}
return res;
}
}
}
#endif