12template<storm::dd::DdType Type,
typename ValueType>
15 : reachableStates(reachableStates), states(reachableStates), values(values) {
19template<storm::dd::DdType Type,
typename ValueType>
23 : reachableStates(reachableStates), states(states), values(values) {
27template<storm::dd::DdType Type,
typename ValueType>
29 : reachableStates(other.
getReachableStates()), states(other.
getStates()), values(other.getTruthValuesVector().template toAdd<ValueType>()) {
33template<storm::dd::DdType Type,
typename ValueType>
35 return std::make_unique<SymbolicQuantitativeCheckResult<Type, ValueType>>(this->reachableStates, this->states, this->values);
38template<storm::dd::DdType Type,
typename ValueType>
40 ValueType
const& bound)
const {
43 states &= values.less(bound);
45 states &= values.lessOrEqual(bound);
47 states &= values.greater(bound);
49 states &= values.greaterOrEqual(bound);
54template<storm::dd::DdType Type,
typename ValueType>
59template<storm::dd::DdType Type,
typename ValueType>
61 return states == reachableStates;
64template<storm::dd::DdType Type,
typename ValueType>
69template<storm::dd::DdType Type,
typename ValueType>
74template<storm::dd::DdType Type,
typename ValueType>
79template<storm::dd::DdType Type,
typename ValueType>
81 return reachableStates;
84template<
typename ValueType>
85void print(std::ostream& out, ValueType
const& value) {
92 if (std::is_same_v<ValueType, storm::RationalNumber> || std::is_same_v<ValueType, storm::ExtendedRationalNumber>) {
98template<
typename ValueType>
99void printRange(std::ostream& out, ValueType
const& min, ValueType
const& max) {
105 if (std::is_same_v<ValueType, storm::RationalNumber> || std::is_same_v<ValueType, storm::ExtendedRationalNumber>) {
106 out <<
" (approx. [";
110 out << storm::utility::convertNumber<double>(min);
116 out << storm::utility::convertNumber<double>(max);
123template<storm::dd::DdType Type,
typename ValueType>
125 uint64_t totalNumberOfStates = states.getNonZeroCount();
126 bool minMaxSupported = std::is_same<ValueType, double>::value || std::is_same<ValueType, storm::RationalNumber>::value;
127 bool printAsRange =
false;
129 if (totalNumberOfStates == 1) {
131 }
else if (states.getNonZeroCount() >= 10 || !minMaxSupported) {
135 if (this->values.isZero()) {
139 for (
auto valuationValuePair : this->values) {
147 if (states.getNonZeroCount() != this->values.getNonZeroCount()) {
160template<storm::dd::DdType Type,
typename ValueType>
162 STORM_LOG_THROW(
filter.isSymbolicQualitativeCheckResult(), storm::exceptions::InvalidOperationException,
163 "Cannot filter symbolic check result with non-symbolic filter.");
164 this->states &=
filter.asSymbolicQualitativeCheckResult<Type>().getTruthValuesVector();
165 this->values *=
filter.asSymbolicQualitativeCheckResult<Type>().getTruthValuesVector().template toAdd<ValueType>();
168template<storm::dd::DdType Type,
typename ValueType>
175template<storm::dd::DdType Type,
typename ValueType>
180template<storm::dd::DdType Type,
typename ValueType>
185template<storm::dd::DdType Type,
typename ValueType>
195template<storm::dd::DdType Type,
typename ValueType>
198 values = one - values;
virtual ExtendedValueType sum() const override
virtual std::unique_ptr< CheckResult > clone() const override
storm::dd::Add< Type, ValueType > const & getValueVector() const
storm::dd::Bdd< Type > const & getStates() const
virtual void oneMinus() override
virtual void filter(QualitativeCheckResult const &filter) override
Filters the current result wrt.
virtual bool isSymbolicQuantitativeCheckResult() const override
virtual std::unique_ptr< CheckResult > compareAgainstBound(storm::logic::ComparisonType comparisonType, ValueType const &bound) const override
virtual bool isResultForAllStates() const override
virtual ExtendedValueType getMax() const override
virtual std::ostream & writeToStream(std::ostream &out) const override
virtual ExtendedValueType average() const override
storm::dd::Bdd< Type > const & getReachableStates() const
typename QuantitativeCheckResult< ValueType >::ExtendedValueType ExtendedValueType
virtual ExtendedValueType getMin() const override
SymbolicQuantitativeCheckResult()=default
virtual bool isSymbolic() const override
#define STORM_LOG_THROW(cond, exception, message)
void print(std::ostream &out, ValueType const &value)
void printRange(std::ostream &out, ValueType const &min, ValueType const &max)
ExtendedValueType< ValueType > positiveInfinity()
ExtendedValueType< ValueType > fromSentinel(ValueType &&value)
Recognises the value that storm::utility::infinity still yields for the value types that have no infi...
bool isNegativeInfinity(ExtendedNumber< ValueType > const &number)
bool isInfinity(ValueType const &a)
TargetType convertNumber(SourceType const &number)