Stan Math Library
2.14.0
reverse mode automatic differentiation
stan
math
fwd
scal
fun
fmax.hpp
Go to the documentation of this file.
1
#ifndef STAN_MATH_FWD_SCAL_FUN_FMAX_HPP
2
#define STAN_MATH_FWD_SCAL_FUN_FMAX_HPP
3
4
#include <
stan/math/fwd/core.hpp
>
5
#include <
stan/math/prim/scal/fun/constants.hpp
>
6
#include <
stan/math/prim/scal/fun/fmax.hpp
>
7
#include <
stan/math/prim/scal/fun/is_nan.hpp
>
8
#include <
stan/math/prim/scal/meta/likely.hpp
>
9
10
namespace
stan
{
11
namespace
math {
12
13
22
template
<
typename
T>
23
inline
fvar<T>
fmax
(
const
fvar<T>
& x1,
const
fvar<T>
& x2) {
24
if
(
unlikely
(
is_nan
(x1.
val_
))) {
25
if
(
is_nan
(x2.
val_
))
26
return
fvar<T>
(
fmax
(x1.
val_
, x2.
val_
),
NOT_A_NUMBER
);
27
else
28
return
fvar<T>
(x2.
val_
, x2.
d_
);
29
}
else
if
(
unlikely
(
is_nan
(x2.
val_
))) {
30
return
fvar<T>
(x1.
val_
, x1.
d_
);
31
}
else
if
(x1.
val_
> x2.
val_
) {
32
return
fvar<T>
(x1.
val_
, x1.
d_
);
33
}
else
if
(x1.
val_
== x2.
val_
) {
34
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
35
}
else
{
36
return
fvar<T>
(x2.
val_
, x2.
d_
);
37
}
38
}
39
48
template
<
typename
T>
49
inline
fvar<T>
fmax
(
double
x1,
const
fvar<T>
& x2) {
50
if
(
unlikely
(
is_nan
(x1))) {
51
if
(
is_nan
(x2.
val_
))
52
return
fvar<T>
(
fmax
(x1, x2.
val_
),
NOT_A_NUMBER
);
53
else
54
return
fvar<T>
(x2.
val_
, x2.
d_
);
55
}
else
if
(
unlikely
(
is_nan
(x2.
val_
))) {
56
return
fvar<T>
(x1, 0.0);
57
}
else
if
(x1 > x2.
val_
) {
58
return
fvar<T>
(x1, 0.0);
59
}
else
if
(x1 == x2.
val_
) {
60
return
fvar<T>
(x2.
val_
,
NOT_A_NUMBER
);
61
}
else
{
62
return
fvar<T>
(x2.
val_
, x2.
d_
);
63
}
64
}
65
74
template
<
typename
T>
75
inline
fvar<T>
fmax
(
const
fvar<T>
& x1,
double
x2) {
76
if
(
unlikely
(
is_nan
(x1.
val_
))) {
77
if
(
is_nan
(x2))
78
return
fvar<T>
(
fmax
(x1.
val_
, x2),
NOT_A_NUMBER
);
79
else
80
return
fvar<T>
(x2, 0.0);
81
}
else
if
(
unlikely
(
is_nan
(x2))) {
82
return
fvar<T>
(x1.
val_
, x1.
d_
);
83
}
else
if
(x1.
val_
> x2) {
84
return
fvar<T>
(x1.
val_
, x1.
d_
);
85
}
else
if
(x1.
val_
== x2) {
86
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
87
}
else
{
88
return
fvar<T>
(x2, 0.0);
89
}
90
}
91
}
92
}
93
#endif
core.hpp
stan::math::fvar::d_
T d_
Definition:
fvar.hpp:16
stan::math::NOT_A_NUMBER
const double NOT_A_NUMBER
(Quiet) not-a-number value.
Definition:
constants.hpp:55
is_nan.hpp
stan
Definition:
log_sum_exp.hpp:8
unlikely
#define unlikely(x)
Definition:
likely.hpp:9
stan::math::fvar::val_
T val_
Definition:
fvar.hpp:15
fmax.hpp
likely.hpp
constants.hpp
stan::math::is_nan
int is_nan(const fvar< T > &x)
Returns 1 if the input's value is NaN and 0 otherwise.
Definition:
is_nan.hpp:21
stan::math::fmax
fvar< T > fmax(const fvar< T > &x1, const fvar< T > &x2)
Return the greater of the two specified arguments.
Definition:
fmax.hpp:23
stan::math::fvar
Definition:
fvar.hpp:14
[
Stan Home Page
]
© 2011–2016, Stan Development Team.