Sacado Package Browser (Single Doxygen Collection)
Version of the Day
Loading...
Searching...
No Matches
src
Sacado_cmath.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Sacado Package
5
// Copyright (2006) Sandia Corporation
6
//
7
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8
// the U.S. Government retains certain rights in this software.
9
//
10
// This library is free software; you can redistribute it and/or modify
11
// it under the terms of the GNU Lesser General Public License as
12
// published by the Free Software Foundation; either version 2.1 of the
13
// License, or (at your option) any later version.
14
//
15
// This library is distributed in the hope that it will be useful, but
16
// WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
// Lesser General Public License for more details.
19
//
20
// You should have received a copy of the GNU Lesser General Public
21
// License along with this library; if not, write to the Free Software
22
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
23
// USA
24
// Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
25
// (etphipp@sandia.gov).
26
//
27
// ***********************************************************************
28
// @HEADER
29
30
#ifndef SACADO_CMATH_HPP
31
#define SACADO_CMATH_HPP
32
33
#include <cmath>
// for most math functions
34
#include "
Sacado_ConfigDefs.h
"
35
36
// Define some math functions that aren't usually in cmath
37
#if !( (defined(_GLIBCXX_USE_C99_MATH_TR1) && defined(__GXX_EXPERIMENTAL_CXX0X__)) || defined(HAVE_SACADO_CXX11) || defined(HAS_C99_TR1_CMATH) || defined(USER_DISABLE_SACADO_TR1_CMATH) )
38
namespace
std
{
39
inline
float
acosh
(
float
x
) {
40
return
std::log(
x
+ std::sqrt(
x
*
x
-
float
(1.0))); }
41
inline
float
asinh
(
float
x
) {
42
return
std::log(
x
+ std::sqrt(
x
*
x
+
float
(1.0))); }
43
inline
float
atanh
(
float
x
) {
44
return
float(0.5)*std::log((
float
(1.0)+
x
)/(
float
(1.0)-
x
)); }
45
46
inline
double
acosh
(
double
x
) {
47
return
std::log(
x
+ std::sqrt(
x
*
x
-
double
(1.0))); }
48
inline
double
asinh
(
double
x
) {
49
return
std::log(
x
+ std::sqrt(
x
*
x
+
double
(1.0))); }
50
inline
double
atanh
(
double
x
) {
51
return
double(0.5)*std::log((
double
(1.0)+
x
)/(
double
(1.0)-
x
)); }
52
}
53
#endif
// HAS_C99_TR1_CMATH
54
55
namespace
Sacado
{
56
57
// Replacement for ternary operator, for scalar types that don't implement
58
// logical operations that return bool, e.g., a simd scalar type that returns
59
// a simd bool. Sacado overloaded operators use this internally when ever
60
// the ternary operator would be used. It can also be used by client code.
61
template
<
typename
Cond,
typename
T>
62
SACADO_INLINE_FUNCTION
63
T
if_then_else
(
const
Cond cond,
const
T
&
a
,
const
T
& b) {
64
return
cond ?
a
: b;
65
}
66
67
// Special version of sqrt(x) that avoids the NaN if x==0 in the derivative.
68
// The default implementation just calls the standard sqrt(x).
69
template
<
typename
T>
70
SACADO_INLINE_FUNCTION
71
T
safe_sqrt
(
const
T
&
x
) {
72
using
std::sqrt;
73
return
sqrt
(
x
);
74
}
75
76
}
77
78
#endif
// SACADO_CMATH_HPP
a
a
Definition:
Sacado_CacheFad_Ops.hpp:426
Sacado_ConfigDefs.h
SACADO_INLINE_FUNCTION
#define SACADO_INLINE_FUNCTION
Definition:
Sacado_ConfigDefs.h:110
asinh
asinh(expr.val())
if_then_else
if_then_else(expr.val() >=0, expr.dx(i), value_type(-expr.dx(i)))
acosh
acosh(expr.val())
sqrt
sqrt(expr.val())
atanh
atanh(expr.val())
T
#define T
Definition:
Sacado_rad.hpp:573
x
int x
Definition:
gmock-matchers_test.cc:3775
Sacado
Definition:
Sacado_mpl_apply.hpp:39
Sacado::safe_sqrt
SACADO_INLINE_FUNCTION T safe_sqrt(const T &x)
Definition:
Sacado_cmath.hpp:71
std
Definition:
Kokkos_LayoutContiguous.hpp:97
Generated by
1.9.6