Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
storm::utility::ExtendedNumber< ValueType > Class Template Reference

A value of ValueType extended with the two infinities -infinity and +infinity. More...

#include <ExtendedNumber.h>

Public Types

enum class  Kind { NegativeInfinity , Finite , PositiveInfinity }

Public Member Functions

 ExtendedNumber ()
 Creates a finite value that is zero.
 ExtendedNumber (ValueType const &value)
 Creates a finite value.
 ExtendedNumber (ValueType &&value)
 ExtendedNumber (ExtendedNumber const &)=default
 ExtendedNumber (ExtendedNumber &&)=default
ExtendedNumber & operator= (ExtendedNumber const &)=default
ExtendedNumber & operator= (ExtendedNumber &&)=default
 ~ExtendedNumber ()=default
bool isFinite () const
bool isInfinite () const
bool isPositiveInfinity () const
bool isNegativeInfinity () const
ValueType const & getFinite () const
ValueType & getFinite ()
ExtendedNumber operator- () const
ExtendedNumber const & operator+ () const
ExtendedNumber & operator+= (ExtendedNumber const &other)
ExtendedNumber & operator-= (ExtendedNumber const &other)
ExtendedNumber & operator*= (ExtendedNumber const &other)
ExtendedNumber & operator/= (ExtendedNumber const &other)

Static Public Member Functions

static ExtendedNumber infinity ()
static ExtendedNumber negativeInfinity ()

Friends

bool operator== (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator!= (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator< (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator<= (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator> (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator>= (ExtendedNumber const &first, ExtendedNumber const &second)
bool operator== (ExtendedNumber const &first, ValueType const &second)
 The comparisons against a plain value.
bool operator== (ValueType const &first, ExtendedNumber const &second)
bool operator!= (ExtendedNumber const &first, ValueType const &second)
bool operator!= (ValueType const &first, ExtendedNumber const &second)
bool operator< (ExtendedNumber const &first, ValueType const &second)
bool operator< (ValueType const &first, ExtendedNumber const &second)
bool operator<= (ExtendedNumber const &first, ValueType const &second)
bool operator<= (ValueType const &first, ExtendedNumber const &second)
bool operator> (ExtendedNumber const &first, ValueType const &second)
bool operator> (ValueType const &first, ExtendedNumber const &second)
bool operator>= (ExtendedNumber const &first, ValueType const &second)
bool operator>= (ValueType const &first, ExtendedNumber const &second)
ExtendedNumber operator+ (ExtendedNumber const &first, ExtendedNumber const &second)
ExtendedNumber operator- (ExtendedNumber const &first, ExtendedNumber const &second)
ExtendedNumber operator* (ExtendedNumber const &first, ExtendedNumber const &second)
ExtendedNumber operator/ (ExtendedNumber const &first, ExtendedNumber const &second)
std::ostream & operator<< (std::ostream &out, ExtendedNumber const &number)

Detailed Description

template<typename ValueType>
class storm::utility::ExtendedNumber< ValueType >

A value of ValueType extended with the two infinities -infinity and +infinity.

This is intended for value types that cannot represent infinity themselves, i.e., those for which NumberTraits<ValueType>::HasInfinity is false. Types that do have their own infinity (such as double) should be used directly instead; the ExtendedValueType alias below picks the right one.

The arithmetic follows the usual conventions for the extended reals. The forms that are not defined there (infinity - infinity, 0 * infinity, and infinity / infinity) throw an InvalidOperationException rather than yielding a NaN, since the exact value types have no NaN to yield.

ExtendedNumber is meant for the boundaries of a computation: check results, bounds that are handed around as scalars, and values that are converted between value types. It is deliberately not meant to be used as the value type of a transition matrix or of a solver, where the tag would be paid for in the innermost loops.

The operators are hidden friends so that a finite ValueType converts implicitly on either side of them, which lets code that mixes extended and plain values read the way it did before.

Definition at line 37 of file ExtendedNumber.h.

Member Enumeration Documentation

◆ Kind

template<typename ValueType>
enum class storm::utility::ExtendedNumber::Kind
strong
Enumerator
NegativeInfinity 
Finite 
PositiveInfinity 

Definition at line 39 of file ExtendedNumber.h.

Constructor & Destructor Documentation

◆ ExtendedNumber() [1/5]

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::ExtendedNumber ( )
inline

Creates a finite value that is zero.

Definition at line 44 of file ExtendedNumber.h.

◆ ExtendedNumber() [2/5]

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::ExtendedNumber ( ValueType const & value)
inline

Creates a finite value.

This conversion is deliberately implicit so that finite values can be used where an extended value is expected.

Definition at line 52 of file ExtendedNumber.h.

◆ ExtendedNumber() [3/5]

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::ExtendedNumber ( ValueType && value)
inline

Definition at line 56 of file ExtendedNumber.h.

◆ ExtendedNumber() [4/5]

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::ExtendedNumber ( ExtendedNumber< ValueType > const & )
default

◆ ExtendedNumber() [5/5]

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::ExtendedNumber ( ExtendedNumber< ValueType > && )
default

◆ ~ExtendedNumber()

template<typename ValueType>
storm::utility::ExtendedNumber< ValueType >::~ExtendedNumber ( )
default

Member Function Documentation

◆ getFinite() [1/2]

template<typename ValueType>
ValueType & storm::utility::ExtendedNumber< ValueType >::getFinite ( )
inline
Precondition
this is finite
Returns
the finite value

Definition at line 121 of file ExtendedNumber.h.

◆ getFinite() [2/2]

template<typename ValueType>
ValueType const & storm::utility::ExtendedNumber< ValueType >::getFinite ( ) const
inline
Precondition
this is finite
Returns
the finite value

Definition at line 112 of file ExtendedNumber.h.

◆ infinity()

template<typename ValueType>
ExtendedNumber storm::utility::ExtendedNumber< ValueType >::infinity ( )
inlinestatic
Returns
+infinity

Definition at line 69 of file ExtendedNumber.h.

◆ isFinite()

template<typename ValueType>
bool storm::utility::ExtendedNumber< ValueType >::isFinite ( ) const
inline
Returns
true if this is neither +infinity nor -infinity

Definition at line 83 of file ExtendedNumber.h.

◆ isInfinite()

template<typename ValueType>
bool storm::utility::ExtendedNumber< ValueType >::isInfinite ( ) const
inline
Returns
true if this is +infinity or -infinity

Definition at line 90 of file ExtendedNumber.h.

◆ isNegativeInfinity()

template<typename ValueType>
bool storm::utility::ExtendedNumber< ValueType >::isNegativeInfinity ( ) const
inline
Returns
true if this is -infinity

Definition at line 104 of file ExtendedNumber.h.

◆ isPositiveInfinity()

template<typename ValueType>
bool storm::utility::ExtendedNumber< ValueType >::isPositiveInfinity ( ) const
inline
Returns
true if this is +infinity

Definition at line 97 of file ExtendedNumber.h.

◆ negativeInfinity()

template<typename ValueType>
ExtendedNumber storm::utility::ExtendedNumber< ValueType >::negativeInfinity ( )
inlinestatic
Returns
-infinity

Definition at line 76 of file ExtendedNumber.h.

◆ operator*=()

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator*= ( ExtendedNumber< ValueType > const & other)
inline

Definition at line 274 of file ExtendedNumber.h.

◆ operator+()

template<typename ValueType>
ExtendedNumber const & storm::utility::ExtendedNumber< ValueType >::operator+ ( ) const
inline

Definition at line 222 of file ExtendedNumber.h.

◆ operator+=()

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator+= ( ExtendedNumber< ValueType > const & other)
inline

Definition at line 266 of file ExtendedNumber.h.

◆ operator-()

template<typename ValueType>
ExtendedNumber storm::utility::ExtendedNumber< ValueType >::operator- ( ) const
inline

Definition at line 211 of file ExtendedNumber.h.

◆ operator-=()

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator-= ( ExtendedNumber< ValueType > const & other)
inline

Definition at line 270 of file ExtendedNumber.h.

◆ operator/=()

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator/= ( ExtendedNumber< ValueType > const & other)
inline

Definition at line 278 of file ExtendedNumber.h.

◆ operator=() [1/2]

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator= ( ExtendedNumber< ValueType > && )
default

◆ operator=() [2/2]

template<typename ValueType>
ExtendedNumber & storm::utility::ExtendedNumber< ValueType >::operator= ( ExtendedNumber< ValueType > const & )
default

◆ operator!= [1/3]

template<typename ValueType>
bool operator!= ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 133 of file ExtendedNumber.h.

◆ operator!= [2/3]

template<typename ValueType>
bool operator!= ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

Definition at line 170 of file ExtendedNumber.h.

◆ operator!= [3/3]

template<typename ValueType>
bool operator!= ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 174 of file ExtendedNumber.h.

◆ operator*

template<typename ValueType>
ExtendedNumber operator* ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 241 of file ExtendedNumber.h.

◆ operator+

template<typename ValueType>
ExtendedNumber operator+ ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 226 of file ExtendedNumber.h.

◆ operator-

template<typename ValueType>
ExtendedNumber operator- ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 237 of file ExtendedNumber.h.

◆ operator/

template<typename ValueType>
ExtendedNumber operator/ ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 251 of file ExtendedNumber.h.

◆ operator< [1/3]

template<typename ValueType>
bool operator< ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 137 of file ExtendedNumber.h.

◆ operator< [2/3]

template<typename ValueType>
bool operator< ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

Definition at line 178 of file ExtendedNumber.h.

◆ operator< [3/3]

template<typename ValueType>
bool operator< ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 183 of file ExtendedNumber.h.

◆ operator<<

template<typename ValueType>
std::ostream & operator<< ( std::ostream & out,
ExtendedNumber< ValueType > const & number )
friend

Definition at line 282 of file ExtendedNumber.h.

◆ operator<= [1/3]

template<typename ValueType>
bool operator<= ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 144 of file ExtendedNumber.h.

◆ operator<= [2/3]

template<typename ValueType>
bool operator<= ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

Definition at line 187 of file ExtendedNumber.h.

◆ operator<= [3/3]

template<typename ValueType>
bool operator<= ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 191 of file ExtendedNumber.h.

◆ operator== [1/3]

template<typename ValueType>
bool operator== ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 126 of file ExtendedNumber.h.

◆ operator== [2/3]

template<typename ValueType>
bool operator== ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

The comparisons against a plain value.

Without these the plain operand is converted to an ExtendedNumber first, which copies it – and for a value type whose copy allocates, such as a GMP rational, that is a heap allocation per comparison. These read the payload directly instead. They are an exact match where the converting ones need a user defined conversion, so they are preferred wherever they apply and change the meaning of nothing.

Definition at line 162 of file ExtendedNumber.h.

◆ operator== [3/3]

template<typename ValueType>
bool operator== ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 166 of file ExtendedNumber.h.

◆ operator> [1/3]

template<typename ValueType>
bool operator> ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 148 of file ExtendedNumber.h.

◆ operator> [2/3]

template<typename ValueType>
bool operator> ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

Definition at line 195 of file ExtendedNumber.h.

◆ operator> [3/3]

template<typename ValueType>
bool operator> ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 199 of file ExtendedNumber.h.

◆ operator>= [1/3]

template<typename ValueType>
bool operator>= ( ExtendedNumber< ValueType > const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 152 of file ExtendedNumber.h.

◆ operator>= [2/3]

template<typename ValueType>
bool operator>= ( ExtendedNumber< ValueType > const & first,
ValueType const & second )
friend

Definition at line 203 of file ExtendedNumber.h.

◆ operator>= [3/3]

template<typename ValueType>
bool operator>= ( ValueType const & first,
ExtendedNumber< ValueType > const & second )
friend

Definition at line 207 of file ExtendedNumber.h.


The documentation for this class was generated from the following file: