pinocchio
3.9.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
Loading...
Searching...
No Matches
sincos.hpp
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
{
29
SINCOSAlgo<S1, S2, S3>::run(a, sa, ca);
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
Main pinocchio namespace.
Definition
treeview.dox:11
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
Generic evaluation of sin/cos functions.
Definition
sincos.hpp:35
include
pinocchio
math
sincos.hpp
Generated by
1.14.0