sincos.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2020 CNRS INRIA
3 // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5 
6 #ifndef __pinocchio_math_sincos_hpp__
7 #define __pinocchio_math_sincos_hpp__
8 
9 #include <cmath>
10 
11 namespace pinocchio
12 {
13  // Forward declaration
14  template<typename S1, typename S2 = S1, typename S3 = S1>
15  struct SINCOSAlgo;
16 
26  template<typename S1, typename S2, typename S3>
27  void SINCOS(const S1 & a, S2 * sa, S3 * ca)
28  {
30  }
31 
33  template<typename S1, typename S2, typename S3>
34  struct SINCOSAlgo
35  {
36  static void run(const S1 & a, S2 * sa, S3 * ca)
37  {
38  using std::cos;
39  using std::sin;
40  (*sa) = sin(a);
41  (*ca) = cos(a);
42  }
43  };
44 
46  template<>
47  struct SINCOSAlgo<double>
48  {
49  static void run(const double & a, double * sa, double * ca)
50  {
51 #ifdef __linux__
52  sincos(a, sa, ca);
53 #elif __APPLE__
54  __sincos(a, sa, ca);
55 #else // if sincos specialization does not exist
56  (*sa) = std::sin(a);
57  (*ca) = std::cos(a);
58 #endif
59  }
60  };
61 
63  template<>
64  struct SINCOSAlgo<float>
65  {
66  static void run(const float & a, float * sa, float * ca)
67  {
68 #ifdef __linux__
69  sincosf(a, sa, ca);
70 #elif __APPLE__
71  __sincosf(a, sa, ca);
72 #else // if sincosf specialization does not exist
73  (*sa) = std::sin(a);
74  (*ca) = std::cos(a);
75 #endif
76  }
77  };
78 
80  template<>
81  struct SINCOSAlgo<long double>
82  {
83  static void run(const long double & a, long double * sa, long double * ca)
84  {
85 #ifdef __linux__
86  sincosl(a, sa, ca);
87 #else // if sincosl specialization does not exist
88  (*sa) = std::sin(a);
89  (*ca) = std::cos(a);
90 #endif
91  }
92  };
93 
94 } // namespace pinocchio
95 
96 #endif // #ifndef __pinocchio_math_sincos_hpp__
pinocchio::SINCOSAlgo
Generic evaluation of sin/cos functions.
Definition: sincos.hpp:15
pinocchio::SINCOS
void SINCOS(const S1 &a, S2 *sa, S3 *ca)
Computes sin/cos values of a given input scalar.
Definition: sincos.hpp:27
pinocchio::SINCOSAlgo::run
static void run(const S1 &a, S2 *sa, S3 *ca)
Definition: sincos.hpp:36
pinocchio::SINCOSAlgo< float >::run
static void run(const float &a, float *sa, float *ca)
Definition: sincos.hpp:66
pinocchio::SINCOSAlgo< double >::run
static void run(const double &a, double *sa, double *ca)
Definition: sincos.hpp:49
pinocchio::SINCOSAlgo< long double >::run
static void run(const long double &a, long double *sa, long double *ca)
Definition: sincos.hpp:83
a
Vec3f a
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27


pinocchio
Author(s):
autogenerated on Sat Jun 22 2024 02:41:50