pinocchio
3.7.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::ContactSolverBaseTpl
Definition
contact-solver-base.hpp:20
pinocchio::SINCOSAlgo
Generic evaluation of sin/cos functions.
Definition
sincos.hpp:35
include
pinocchio
math
sincos.hpp
Generated by
1.9.8