45#ifndef LASS_GUARDIAN_OF_INCLUSION_NUM_INTERVAL_H
46#define LASS_GUARDIAN_OF_INCLUSION_NUM_INTERVAL_H
84 static const interval<C> empty;
86 inline interval() { v[0]=v[1]=C();};
88 inline explicit interval(
typename util::CallTraits<baseType>::TParam iValue);
89 inline explicit interval(
typename util::CallTraits<baseType>::TParam iInf,
typename util::CallTraits<baseType>::TParam iSup);
90 inline interval& operator=(
const interval<C>& i);
92 inline const interval& operator+()
const;
93 inline interval operator-()
const;
96 inline void set(
typename util::CallTraits<C>::TParam iInf,
typename util::CallTraits<C>::TParam iSup);
102 inline bool contains(
typename util::CallTraits<baseType>::TParam ix)
const;
109 inline baseType
inf()
const;
111 inline baseType
sup()
const;
113 inline baseType&
inf();
115 inline baseType&
sup();
117 inline baseType
mid()
const;
119 inline baseType
diam()
const;
121 inline baseType
ratio()
const;
124 inline bool operator> (
const interval<C>& i)
const;
128 inline bool operator==(
const interval<C>& i)
const;
130 inline bool operator!=(
const interval<C>& i)
const;
134 inline bool operator<=(
const interval<C>& i)
const;
137 inline bool pe(
const interval<C>& i)
const;
139 inline bool pne(
const interval<C>& i)
const;
141 inline bool pg(
const interval<C>& i)
const;
143 inline bool pge(
const interval<C>& i)
const;
145 inline bool pl(
const interval<C>& i)
const;
147 inline bool ple(
const interval<C>& i)
const;
150 baseType
fe(
const interval<C>& i)
const;
152 inline C
fne(
const interval<C>& i)
const;
154 baseType
fg(
const interval<C>& i)
const;
156 baseType
fge(
const interval<C>& i)
const;
158 baseType
fl(
const interval<C>& i)
const;
160 baseType
fle(
const interval<C>& i)
const;
162 inline interval& operator+=(
const interval<C>& i);
163 inline interval& operator-=(
const interval<C>& i);
164 inline interval& operator*=(
const interval<C>& i);
165 interval& operator/=(
const interval<C>& i);
167 inline interval& operator+=(
typename util::CallTraits<baseType>::TParam s);
168 inline interval& operator-=(
typename util::CallTraits<baseType>::TParam s);
169 inline interval& operator*=(
typename util::CallTraits<baseType>::TParam s);
170 inline interval& operator/=(
typename util::CallTraits<baseType>::TParam s);
172 friend void inpsqr<C>(interval<C>& i);
173 friend void inpsqrt<C>(interval<C>& i);
174 friend void inpexp<C>(interval<C>& i);
175 friend void inplog<C>(interval<C>& i);
176 friend void inpnorm<C>(interval<C>& i);
177 friend void inpinv<C>(interval<C>& i);
179 template<
typename C2,
typename F>
friend interval<C2> applyFunction(
const interval<C2>& iV, F func );
183template<
typename C> interval<C> operator+(
const interval<C>& i1,
const interval<C>& i2);
184template<
typename C> interval<C> operator-(
const interval<C>& i1,
const interval<C>& i2);
185template<
typename C> interval<C> operator*(
const interval<C>& i1,
const interval<C>& i2);
186template<
typename C> interval<C> operator/(
const interval<C>& i1,
const interval<C>& i2);
188template<
typename C> std::ostream& operator<<( std::ostream& os,
const interval<C>& iV );
189template<
typename C> std::string str(
const interval<C>& iV );
191template<
typename C>
const interval<C> interval<C>::empty = interval<C>(NumTraits<C>::one, NumTraits<C>::zero);
195template<
typename C> interval<C>
sqr(
const interval<C>& i);
196template<
typename C> interval<C> sqrt(
const interval<C>& i);
197template<
typename C> interval<C> exp(
const interval<C>& i);
198template<
typename C> interval<C> log(
const interval<C>& i);
200template<
typename C> interval<C> set_union(
const interval<C>& i1,
const interval<C>& i2);
201template<
typename C> interval<C> set_intersect(
const interval<C>& i1,
const interval<C>& i2);
206struct NumTraits< interval<C> >
208 typedef interval<C> selfType;
210 typedef C intervalType;
221 static const size_t memorySize;
222 static const std::string name();
225 static const interval<C> zero;
227 static const interval<C> epsilon;
228 static const interval<C> min;
229 static const interval<C> max;
230 static const interval<C> minStrictPositive;
231 static const interval<C> pi;
232 static const interval<C> e;
233 static const interval<C> sqrt2;
234 static const interval<C> sqrtPi;
238template<
class C>
const size_t NumTraits<interval<C> >::memorySize =
sizeof(
interval<C>);
239template<
class C>
const std::string NumTraits<interval<C> >::name() {
return std::string(
"interval<")+NumTraits<baseType>::name()+ std::string(
">"); }
241template<
class C>
const interval<C> NumTraits<interval<C> >::one = interval<C>( NumTraits<C>::one );
242template<
class C>
const interval<C> NumTraits<interval<C> >::zero = interval<C>( NumTraits<C>::zero );
244template<
class C>
const interval<C> NumTraits<interval<C> >::epsilon = interval<C>( NumTraits<C>::epsilon );
245template<
class C>
const interval<C> NumTraits<interval<C> >::min = interval<C>( NumTraits<C>::min );
246template<
class C>
const interval<C> NumTraits<interval<C> >::max = interval<C>( NumTraits<C>::max );
247template<
class C>
const interval<C> NumTraits<interval<C> >::minStrictPositive = interval<C>( NumTraits<C>::minStrictPositive );
248template<
class C>
const interval<C> NumTraits<interval<C> >::pi = interval<C>( NumTraits<C>::pi );
249template<
class C>
const interval<C> NumTraits<interval<C> >::e = interval<C>( NumTraits<C>::e );
250template<
class C>
const interval<C> NumTraits<interval<C> >::sqrt2 = interval<C>( NumTraits<C>::sqrt2 );
251template<
class C>
const interval<C> NumTraits<interval<C> >::sqrtPi = interval<C>( NumTraits<C>::sqrtPi );
bool contains(typename util::CallTraits< baseType >::TParam ix) const
returns true when ix is in the interval
bool pl(const interval< C > &i) const
possibly less than
bool operator!=(const interval< C > &i) const
certainly not equal
bool operator>=(const interval< C > &i) const
certainly greater or equal than
bool isSingleton() const
return true for degenerated intervals
bool pg(const interval< C > &i) const
possibly greater than
bool pe(const interval< C > &i) const
possibly equal
baseType sup() const
the supinum of the interval
bool ple(const interval< C > &i) const
possibly less or equal than
baseType & operator[](int i)
indexed access, 0 = infinum, 1 = supinum
baseType ratio() const
the ratio of the supinum over the infinum
baseType fle(const interval< C > &i) const
fuzzy less or equal than
baseType fge(const interval< C > &i) const
fuzzy greater or equal than
bool pge(const interval< C > &i) const
possibly greater or equal than
baseType fl(const interval< C > &i) const
fuzzy less than
bool operator==(const interval< C > &i) const
certainly equal
baseType diam() const
the difference between supinum and infinum
C fne(const interval< C > &i) const
fuzzy not equal
baseType inf() const
the infinum of the interval
baseType mid() const
the middle of the interval
bool pne(const interval< C > &i) const
possibly not equal
bool operator<=(const interval< C > &i) const
certainly less or equal than
void set(typename util::CallTraits< C >::TParam iInf, typename util::CallTraits< C >::TParam iSup)
direct set of both infinum and supinum
baseType fg(const interval< C > &i) const
fuzzy greater than
bool operator>(const interval< C > &i) const
certainly greater than
bool operator<(const interval< C > &i) const
certainly less than
bool isEmpty() const
returns true for the empty interval
baseType fe(const interval< C > &i) const
fuzzy equal
T sqr(const T &x)
return x * x
numeric types and traits.
Library for Assembled Shared Sources.