|
|
@ -47,6 +47,22 @@ namespace storm { |
|
|
|
typedef DoubleLess type; |
|
|
|
}; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
struct ElementLessEqual { |
|
|
|
typedef std::less_equal<ValueType> type; |
|
|
|
}; |
|
|
|
|
|
|
|
struct DoubleLessEqual { |
|
|
|
bool operator()(double a, double b) const { |
|
|
|
return (a == 0.0 && b >= 0.0) || (b - a >= 1e-17); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
template<> |
|
|
|
struct ElementLessEqual<double> { |
|
|
|
typedef DoubleLessEqual type; |
|
|
|
}; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
struct ElementGreater { |
|
|
|
typedef std::greater<ValueType> type; |
|
|
@ -62,6 +78,22 @@ namespace storm { |
|
|
|
struct ElementGreater<double> { |
|
|
|
typedef DoubleGreater type; |
|
|
|
}; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
struct ElementGreaterEqual { |
|
|
|
typedef std::greater_equal<ValueType> type; |
|
|
|
}; |
|
|
|
|
|
|
|
struct DoubleGreaterEqual { |
|
|
|
bool operator()(double a, double b) const { |
|
|
|
return (b == 0.0 && a >= 0.0) || (a - b >= 1e-17); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
template<> |
|
|
|
struct ElementGreaterEqual<double> { |
|
|
|
typedef DoubleGreaterEqual type; |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
@ -70,6 +102,12 @@ namespace storm { |
|
|
|
template<typename ValueType> |
|
|
|
using ElementGreater = typename detail::ElementGreater<ValueType>::type; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
using ElementLessEqual = typename detail::ElementLessEqual<ValueType>::type; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
using ElementGreaterEqual = typename detail::ElementGreaterEqual<ValueType>::type; |
|
|
|
|
|
|
|
template<typename ValueType> |
|
|
|
ValueType one(); |
|
|
|
|
|
|
|