Stan Math Library
2.15.0
reverse mode automatic differentiation
stan
math
fwd
scal
fun
fmin.hpp
Go to the documentation of this file.
1
#ifndef STAN_MATH_FWD_SCAL_FUN_FMIN_HPP
2
#define STAN_MATH_FWD_SCAL_FUN_FMIN_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/fmin.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
template
<
typename
T>
14
inline
fvar<T>
fmin
(
const
fvar<T>
& x1,
const
fvar<T>
& x2) {
15
if
(
unlikely
(
is_nan
(x1.
val_
))) {
16
if
(
is_nan
(x2.
val_
))
17
return
fvar<T>
(
fmin
(x1.
val_
, x2.
val_
),
NOT_A_NUMBER
);
18
else
19
return
fvar<T>
(x2.
val_
, x2.
d_
);
20
}
else
if
(
unlikely
(
is_nan
(x2.
val_
))) {
21
return
fvar<T>
(x1.
val_
, x1.
d_
);
22
}
else
if
(x1.
val_
< x2.
val_
) {
23
return
fvar<T>
(x1.
val_
, x1.
d_
);
24
}
else
if
(x1.
val_
== x2.
val_
) {
25
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
26
}
else
{
27
return
fvar<T>
(x2.
val_
, x2.
d_
);
28
}
29
}
30
31
template
<
typename
T>
32
inline
fvar<T>
fmin
(
double
x1,
const
fvar<T>
& x2) {
33
if
(
unlikely
(
is_nan
(x1))) {
34
if
(
is_nan
(x2.
val_
))
35
return
fvar<T>
(
fmin
(x1, x2.
val_
),
NOT_A_NUMBER
);
36
else
37
return
fvar<T>
(x2.
val_
, x2.
d_
);
38
}
else
if
(
unlikely
(
is_nan
(x2.
val_
))) {
39
return
fvar<T>
(x1, 0.0);
40
}
else
if
(x1 < x2.
val_
) {
41
return
fvar<T>
(x1, 0.0);
42
}
else
if
(x1 == x2.
val_
) {
43
return
fvar<T>
(x2.
val_
,
NOT_A_NUMBER
);
44
}
else
{
45
return
fvar<T>
(x2.
val_
, x2.
d_
);
46
}
47
}
48
49
template
<
typename
T>
50
inline
fvar<T>
fmin
(
const
fvar<T>
& x1,
double
x2) {
51
if
(
unlikely
(
is_nan
(x1.
val_
))) {
52
if
(
is_nan
(x2))
53
return
fvar<T>
(
fmin
(x1.
val_
, x2),
NOT_A_NUMBER
);
54
else
55
return
fvar<T>
(x2, 0.0);
56
}
else
if
(
unlikely
(
is_nan
(x2))) {
57
return
fvar<T>
(x1.
val_
, x1.
d_
);
58
}
else
if
(x1.
val_
< x2) {
59
return
fvar<T>
(x1.
val_
, x1.
d_
);
60
}
else
if
(x1.
val_
== x2) {
61
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
62
}
else
{
63
return
fvar<T>
(x2, 0.0);
64
}
65
}
66
67
}
68
}
69
#endif
stan::math::fmin
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
Definition:
fmin.hpp:14
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
fmin.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::fvar
Definition:
fvar.hpp:14
[
Stan Home Page
]
© 2011–2016, Stan Development Team.