Storm 1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
ExtendedNumber.h File Reference
#include <functional>
#include <limits>
#include <ostream>
#include <type_traits>
#include <utility>
#include <vector>
#include "storm/exceptions/InvalidOperationException.h"
#include "storm/exceptions/NotSupportedException.h"
#include "storm/utility/NumberTraits.h"
#include "storm/utility/constants.h"
#include "storm/utility/macros.h"
Include dependency graph for ExtendedNumber.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  storm::utility::ExtendedNumber< ValueType >
 A value of ValueType extended with the two infinities -infinity and +infinity. More...
struct  storm::utility::detail::IsExtendedNumber< T >
struct  storm::utility::detail::IsExtendedNumber< ExtendedNumber< T > >
struct  storm::utility::detail::FiniteValueType< T >
 The finite value type underlying a (possibly extended) type. More...
struct  storm::utility::detail::FiniteValueType< ExtendedNumber< T > >
struct  storm::NumberTraits< storm::utility::ExtendedNumber< ValueType > >
 An extended number is exactly as exact as what it extends, and it is the type that does have infinity – that is the whole point of it. More...
struct  std::hash< storm::utility::ExtendedNumber< ValueType > >
struct  std::numeric_limits< storm::utility::ExtendedNumber< ValueType > >
 Reports the infinity that ExtendedNumber adds, so that the generic storm::utility::infinity and storm::utility::isInfinity work on it without a special case. More...

Namespaces

namespace  storm
namespace  storm::utility
namespace  storm::utility::detail
namespace  std

Typedefs

template<typename ValueType>
using storm::utility::ExtendedValueType = std::conditional_t<storm::NumberTraits<ValueType>::HasInfinity, ValueType, ExtendedNumber<ValueType>>
 The type to use for values that may be infinite.
template<typename ValueType>
using storm::utility::FiniteValueType = typename detail::FiniteValueType<ValueType>::type
 The finite value type underlying a (possibly extended) type.
using storm::ExtendedRationalNumber = storm::utility::ExtendedValueType<RationalNumber>
 The rational number type extended with the two infinities.
using storm::ExtendedRationalFunction = storm::utility::ExtendedValueType<RationalFunction>
 The rational function type extended with the two infinities.

Functions

template<typename ValueType>
ExtendedValueType< ValueType > storm::utility::positiveInfinity ()
template<typename ValueType>
ExtendedValueType< ValueType > storm::utility::negativeInfinity ()
template<typename ValueType>
ValueType const & storm::utility::getFinite (ExtendedNumber< ValueType > const &value)
template<typename ValueType>
requires (!detail::IsExtendedNumber<ValueType>::value)
ValueType const & storm::utility::getFinite (ValueType const &value)
template<typename ValueType>
bool storm::utility::isFinite (ExtendedNumber< ValueType > const &value)
template<typename ValueType>
requires (!detail::IsExtendedNumber<ValueType>::value)
bool storm::utility::isFinite (ValueType const &value)
template<typename ValueType>
std::vector< ValueType > storm::utility::narrowFinite (std::vector< ExtendedValueType< ValueType > > &&values)
 The counterpart of widen for a vector all of whose values are finite.
template<typename ValueType>
std::vector< ValueType > storm::utility::narrowFinite (std::vector< ExtendedValueType< ValueType > > const &values)
 The counterpart of widen for a vector all of whose values are finite.
template<typename ValueType>
std::vector< ValueType > storm::utility::narrowFinite (std::vector< ExtendedValueType< ValueType > > &&values, ValueType const &defaultValue)
 The counterpart of widen for a vector, falling back to the given value wherever a value is infinite.
template<typename ValueType>
ValueType storm::utility::narrow (ExtendedValueType< ValueType > const &value)
 Narrows an extended value back into the plain value type, for the interfaces that cannot hold an infinite one – a coordinate of a polytope, say.
template<typename ValueType>
std::vector< ExtendedValueType< ValueType > > storm::utility::widen (std::vector< ValueType > &&values)
 Widens a vector of finite values into the extended value type.
template<typename ValueType>
requires (!std::is_reference_v<ValueType>)
ExtendedValueType< ValueType > storm::utility::fromSentinel (ValueType &&value)
 Recognises the value that storm::utility::infinity still yields for the value types that have no infinity of their own – the literal 100000000000 – and turns it into a real infinity.
template<typename ValueType>
std::vector< ExtendedValueType< ValueType > > storm::utility::fromSentinel (std::vector< ValueType > &&values)
 The vector form.
template<typename ValueType>
ExtendedValueType< ValueType > storm::utility::fromSentinel (ValueType const &value)
template<typename ValueType>
ValueType storm::utility::toSentinel (ExtendedValueType< ValueType > const &value)
 The counterpart of fromSentinel: hands an extended value back to a part of Storm that still expects the sentinel, most of all a decision diagram leaf.
template<typename ValueType>
requires (detail::IsExtendedNumber<ValueType>::value)
ValueType storm::utility::zero ()
 The generic storm::utility::zero, one and infinity are declared for every value type but defined only for the ones that are explicitly instantiated.
template<typename ValueType>
requires (detail::IsExtendedNumber<ValueType>::value)
ValueType storm::utility::one ()
template<typename ValueType>
requires (detail::IsExtendedNumber<ValueType>::value)
ValueType storm::utility::infinity ()
template<typename ValueType>
bool storm::utility::isInfinity (ExtendedNumber< ValueType > const &number)
template<typename ValueType>
bool storm::utility::isNegativeInfinity (ExtendedNumber< ValueType > const &number)
template<typename ValueType>
requires (!detail::IsExtendedNumber<ValueType>::value)
bool storm::utility::isNegativeInfinity (ValueType const &value)
template<typename ValueType>
bool storm::utility::isZero (ExtendedNumber< ValueType > const &number)
template<typename ValueType>
bool storm::utility::isOne (ExtendedNumber< ValueType > const &number)
template<typename ValueType>
bool storm::utility::isConstant (ExtendedNumber< ValueType > const &number)
template<typename ValueType>
ExtendedNumber< ValueType > storm::utility::abs (ExtendedNumber< ValueType > const &number)
template<typename TargetType, typename SourceType>
TargetType storm::utility::convertNumber (ExtendedNumber< SourceType > const &number)
 Converts a possibly infinite value to another type, which may itself be an ExtendedNumber or a type that has its own infinity.
template<typename TargetType, typename SourceType>
requires (detail::IsExtendedNumber<TargetType>::value && !detail::IsExtendedNumber<SourceType>::value)
TargetType storm::utility::convertNumber (SourceType const &number)
 Converts a value into an extended one.