Stan
2.5.0
probability, sampling & optimization
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
src
stan
agrad
fwd
functions
fmin.hpp
Go to the documentation of this file.
1
#ifndef STAN__AGRAD__FWD__FUNCTIONS__FMIN_HPP
2
#define STAN__AGRAD__FWD__FUNCTIONS__FMIN_HPP
3
4
#include <
stan/agrad/fwd/fvar.hpp
>
5
#include <
stan/meta/traits.hpp
>
6
#include <
stan/math/constants.hpp
>
7
#include <math.h>
8
#include <
stan/meta/likely.hpp
>
9
10
namespace
stan {
11
12
namespace
agrad {
13
14
template
<
typename
T>
15
inline
16
fvar<T>
17
fmin
(
const
fvar<T>
& x1,
const
fvar<T>
& x2) {
18
using ::fmin
;
19
using
stan::math::NOT_A_NUMBER
;
20
if
(
unlikely
(
boost::math::isnan
(x1.
val_
))) {
21
if
(
boost::math::isnan
(x2.
val_
))
22
return
fvar<T>
(
fmin
(x1.
val_
,x2.
val_
),
NOT_A_NUMBER
);
23
else
24
return
fvar<T>
(x2.
val_
, x2.
d_
);
25
}
else
if
(
unlikely
(
boost::math::isnan
(x2.
val_
)))
26
return
fvar<T>
(x1.
val_
,x1.
d_
);
27
else
if
(x1.
val_
< x2.
val_
)
28
return
fvar<T>
(x1.
val_
, x1.
d_
);
29
else
if
(x1.
val_
== x2.
val_
)
30
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
31
else
32
return
fvar<T>
(x2.
val_
, x2.
d_
);
33
}
34
35
template
<
typename
T>
36
inline
37
fvar<T>
38
fmin
(
const
double
x1,
const
fvar<T>
& x2) {
39
using ::fmin
;
40
using
stan::math::NOT_A_NUMBER
;
41
if
(
unlikely
(
boost::math::isnan
(x1))) {
42
if
(
boost::math::isnan
(x2.
val_
))
43
return
fvar<T>
(
fmin
(x1,x2.
val_
),
NOT_A_NUMBER
);
44
else
45
return
fvar<T>
(x2.
val_
, x2.
d_
);
46
}
else
if
(
unlikely
(
boost::math::isnan
(x2.
val_
)))
47
return
fvar<T>
(x1,0.0);
48
else
if
(x1 < x2.
val_
)
49
return
fvar<T>
(x1, 0.0);
50
else
if
(x1 == x2.
val_
)
51
return
fvar<T>
(x2.
val_
,
NOT_A_NUMBER
);
52
else
53
return
fvar<T>
(x2.
val_
, x2.
d_
);
54
}
55
56
template
<
typename
T>
57
inline
58
fvar<T>
59
fmin
(
const
fvar<T>
& x1,
const
double
x2) {
60
using ::fmin
;
61
using
stan::math::NOT_A_NUMBER
;
62
if
(
unlikely
(
boost::math::isnan
(x1.
val_
))) {
63
if
(
boost::math::isnan
(x2))
64
return
fvar<T>
(
fmin
(x1.
val_
,x2),
NOT_A_NUMBER
);
65
else
66
return
fvar<T>
(x2, 0.0);
67
}
else
if
(
unlikely
(
boost::math::isnan
(x2)))
68
return
fvar<T>
(x1.
val_
,x1.
d_
);
69
else
if
(x1.
val_
< x2)
70
return
fvar<T>
(x1.
val_
, x1.
d_
);
71
else
if
(x1.
val_
== x2)
72
return
fvar<T>
(x1.
val_
,
NOT_A_NUMBER
);
73
else
74
return
fvar<T>
(x2, 0.0);
75
}
76
}
77
}
78
#endif
boost::math::isnan
bool isnan(const stan::agrad::var &v)
Checks if the given number is NaN.
Definition:
boost_fpclassify.hpp:69
stan::agrad::fmin
var fmin(const double &a, const stan::agrad::var &b)
Returns the minimum of a scalar and variable, promoting the scalar to a variable if it is larger (C99...
Definition:
fmin.hpp:126
stan::math::NOT_A_NUMBER
const double NOT_A_NUMBER
(Quiet) not-a-number value.
Definition:
constants.hpp:53
stan::agrad::fvar
Definition:
fvar.hpp:13
traits.hpp
unlikely
#define unlikely(x)
Definition:
likely.hpp:9
stan::agrad::fmin
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
Definition:
fmin.hpp:17
fvar.hpp
likely.hpp
stan::agrad::fvar::d_
T d_
Definition:
fvar.hpp:16
constants.hpp
stan::agrad::fvar::val_
T val_
Definition:
fvar.hpp:15
[
Stan Home Page
]
© 2011–2014, Stan Development Team.