50template <
typename MatType>
51typename MatType::Scalar infty_norm(
const Eigen::MatrixBase<MatType> &z) {
52 if (z.rows() == 0 || z.cols() == 0) {
55 return z.template lpNorm<Eigen::Infinity>();
59template <
typename MatType>
60typename MatType::Scalar infty_norm(
const std::vector<MatType> &z) {
61 const std::size_t n = z.size();
62 typename MatType::Scalar out = 0.;
63 for (std::size_t i = 0; i < n; i++) {
64 out = std::max(out, infty_norm(z[i]));
70template <
typename Scalar>
inline bool check_scalar(
const Scalar value) {
71 return std::isnan(value) || std::isinf(value);
78template <
typename Scalar>
80 const Scalar prec = std::numeric_limits<Scalar>::epsilon()) {
81 return std::abs(a - b) < prec * (1 + std::max(std::abs(a), std::abs(b)));
84template <typename T, typename = std::enable_if_t<std::is_scalar<T>::value>>
85bool check_value(
const T &x) {
86 static_assert(std::is_scalar<T>::value,
"Parameter T should be scalar.");
90template <
typename MatrixType>
91bool check_value(
const Eigen::MatrixBase<MatrixType> &x) {
92 return (x.hasNaN() || (!x.allFinite()));
95template <
typename T> T sign(
const T &x) {
96 static_assert(std::is_scalar<T>::value,
"Parameter T should be scalar.");
97 return T((x > T(0)) - (x < T(0)));
bool scalar_close(const Scalar a, const Scalar b, const Scalar prec=std::numeric_limits< Scalar >::epsilon())
Tests whether a and b are close, within absolute and relative precision prec.