Unverified Commit ce7f7820 authored by Bob Carpenter's avatar Bob Carpenter Committed by GitHub
Browse files

Merge pull request #810 from danluu/stanmath_bug806

Fix linking issue where static members are defined but not initialized
parents 611f982a 9ab188e1
No related merge requests found
Showing with 94 additions and 26 deletions
+94 -26
......@@ -8,15 +8,15 @@ namespace std {
template <typename T>
struct numeric_limits<stan::math::fvar<T> > {
static const bool is_specialized = true;
static const bool is_specialized;
static stan::math::fvar<T> min() { return numeric_limits<double>::min(); }
static stan::math::fvar<T> max() { return numeric_limits<double>::max(); }
static const int digits = numeric_limits<double>::digits;
static const int digits10 = numeric_limits<double>::digits10;
static const bool is_signed = numeric_limits<double>::is_signed;
static const bool is_integer = numeric_limits<double>::is_integer;
static const bool is_exact = numeric_limits<double>::is_exact;
static const int radix = numeric_limits<double>::radix;
static const int digits;
static const int digits10;
static const bool is_signed;
static const bool is_integer;
static const bool is_exact;
static const int radix;
static stan::math::fvar<T> epsilon() {
return numeric_limits<double>::epsilon();
}
......@@ -24,18 +24,17 @@ struct numeric_limits<stan::math::fvar<T> > {
return numeric_limits<double>::round_error();
}
static const int min_exponent = numeric_limits<double>::min_exponent;
static const int min_exponent10 = numeric_limits<double>::min_exponent10;
static const int max_exponent = numeric_limits<double>::max_exponent;
static const int max_exponent10 = numeric_limits<double>::max_exponent10;
static const bool has_infinity = numeric_limits<double>::has_infinity;
static const bool has_quiet_NaN = numeric_limits<double>::has_quiet_NaN;
static const bool has_signaling_NaN
= numeric_limits<double>::has_signaling_NaN;
static const float_denorm_style has_denorm
= numeric_limits<double>::has_denorm;
static const bool has_denorm_loss = numeric_limits<double>::has_denorm_loss;
static const int min_exponent;
static const int min_exponent10;
static const int max_exponent;
static const int max_exponent10;
static const bool has_infinity;
static const bool has_quiet_NaN;
static const bool has_signaling_NaN;
static const float_denorm_style has_denorm;
static const bool has_denorm_loss;
static stan::math::fvar<T> infinity() {
return numeric_limits<double>::infinity();
}
......@@ -49,14 +48,83 @@ struct numeric_limits<stan::math::fvar<T> > {
return numeric_limits<double>::denorm_min();
}
static const bool is_iec559 = numeric_limits<double>::is_iec559;
static const bool is_bounded = numeric_limits<double>::is_bounded;
static const bool is_modulo = numeric_limits<double>::is_modulo;
static const bool is_iec559;
static const bool is_bounded;
static const bool is_modulo;
static const bool traps = numeric_limits<double>::traps;
static const bool tinyness_before = numeric_limits<double>::tinyness_before;
static const float_round_style round_style
= numeric_limits<double>::round_style;
static const bool traps;
static const bool tinyness_before;
static const float_round_style round_style;
};
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_specialized = true;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::digits
= numeric_limits<double>::digits;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::digits10
= numeric_limits<double>::digits10;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_signed
= numeric_limits<double>::is_signed;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_integer
= numeric_limits<double>::is_integer;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_exact
= numeric_limits<double>::is_exact;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::radix
= numeric_limits<double>::radix;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::min_exponent
= numeric_limits<double>::min_exponent;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::min_exponent10
= numeric_limits<double>::min_exponent10;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::max_exponent
= numeric_limits<double>::max_exponent;
template <typename T>
const int numeric_limits<stan::math::fvar<T> >::max_exponent10
= numeric_limits<double>::max_exponent10;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::has_infinity
= numeric_limits<double>::has_infinity;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::has_quiet_NaN
= numeric_limits<double>::has_quiet_NaN;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::has_signaling_NaN
= numeric_limits<double>::has_signaling_NaN;
template <typename T>
const float_denorm_style numeric_limits<stan::math::fvar<T> >::has_denorm
= numeric_limits<double>::has_denorm;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::has_denorm_loss
= numeric_limits<double>::has_denorm_loss;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_iec559
= numeric_limits<double>::is_iec559;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_bounded
= numeric_limits<double>::is_bounded;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::is_modulo
= numeric_limits<double>::is_modulo;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::traps
= numeric_limits<double>::traps;
template <typename T>
const bool numeric_limits<stan::math::fvar<T> >::tinyness_before
= numeric_limits<double>::tinyness_before;
template <typename T>
const float_round_style numeric_limits<stan::math::fvar<T> >::round_style
= numeric_limits<double>::round_style;
} // namespace std
#endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment