+++ /dev/null
-/*! ========================================================================
-** Extended Template and Library
-** Fixed-Point Math Class Implementation
-** $Id$
-**
-** Copyright (c) 2002 Robert B. Quattlebaum Jr.
-** Copyright (c) 2007 Chris Moore
-**
-** This package is free software; you can redistribute it and/or
-** modify it under the terms of the GNU General Public License as
-** published by the Free Software Foundation; either version 2 of
-** the License, or (at your option) any later version.
-**
-** This package is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-** General Public License for more details.
-**
-** === N O T E S ===========================================================
-**
-** This is an internal header file, included by other ETL headers.
-** You should not attempt to use it directly.
-**
-** ========================================================================= */
-
-/* === S T A R T =========================================================== */
-
-#ifndef __ETL__FIXED_H
-#define __ETL__FIXED_H
-
-/* === H E A D E R S ======================================================= */
-
-#include <cmath>
-
-/* === M A C R O S ========================================================= */
-
-// the "+0.5" code was commented out - maybe to make thing run faster?
-// it can be re-enabled by uncommenting this next line:
-// #define ROUND_TO_NEAREST_INTEGER
-
-#ifndef ETL_FIXED_TYPE
-# define ETL_FIXED_TYPE int
-#endif
-
-#ifndef ETL_FIXED_BITS
-#define ETL_FIXED_BITS 12
-#endif
-
-#ifndef ETL_FIXED_EPSILON
-#define ETL_FIXED_EPSILON _EPSILON()
-#endif
-
-#ifdef __GNUC___
-#define ETL_ATTRIB_CONST __attribute__ ((const))
-#define ETL_ATTRIB_PURE __attribute__ ((pure))
-#define ETL_ATTRIB_INLINE __attribute__ ((always_inline))
-#else
-#define ETL_ATTRIB_CONST
-#define ETL_ATTRIB_PURE
-#define ETL_ATTRIB_INLINE
-#endif
-
-/* === C L A S S E S & S T R U C T S ======================================= */
-
-_ETL_BEGIN_NAMESPACE
-
-// Forward declarations
-template<typename T, unsigned int FIXED_BITS> class fixed_base;
-//template<> class fixed_base<char>;
-
-_ETL_END_NAMESPACE
-
-_STD_BEGIN_NAMESPACE
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> abs(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> cos(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> cosh(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> exp(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> log(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> log10(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> pow(const _ETL::fixed_base<T,FIXED_BITS>&, int);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> pow(const _ETL::fixed_base<T,FIXED_BITS>&, const T&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> pow(const _ETL::fixed_base<T,FIXED_BITS>&,
- const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> pow(const _ETL::fixed_base<T,FIXED_BITS>&, const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> sin(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> sinh(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> sqrt(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> tan(const _ETL::fixed_base<T,FIXED_BITS>&);
-template<typename T, unsigned int FIXED_BITS> _ETL::fixed_base<T,FIXED_BITS> tanh(const _ETL::fixed_base<T,FIXED_BITS>&);
-_STD_END_NAMESPACE
-_ETL_BEGIN_NAMESPACE
-
-/*! ========================================================================
-** \class fixed_base
-** \brief Fixed-point template base class
-**
-** A more detailed description needs to be written.
-*/
-template <class T,unsigned int FIXED_BITS>
-class fixed_base
-{
-public:
- typedef T value_type;
-private:
- T _data;
-
- typedef fixed_base<T,FIXED_BITS> _fixed;
- typedef fixed_base<T,FIXED_BITS> self_type;
-
- inline static bool _TYPE_SMALLER_THAN_INT() ETL_ATTRIB_CONST ETL_ATTRIB_INLINE;
- inline static bool _USING_ALL_BITS() ETL_ATTRIB_CONST ETL_ATTRIB_INLINE;
- inline static value_type _ONE() ETL_ATTRIB_CONST ETL_ATTRIB_INLINE;
- inline static value_type _F_MASK() ETL_ATTRIB_CONST ETL_ATTRIB_INLINE;
- inline static float _EPSILON() ETL_ATTRIB_CONST ETL_ATTRIB_INLINE;
-
- class raw { };
-public:
- fixed_base()ETL_ATTRIB_INLINE;
- fixed_base(const float &f)ETL_ATTRIB_INLINE;
- fixed_base(const double &f)ETL_ATTRIB_INLINE;
- fixed_base(const long double &f)ETL_ATTRIB_INLINE;
- fixed_base(const int &i)ETL_ATTRIB_INLINE;
- fixed_base(const int &n,const int &d)ETL_ATTRIB_INLINE; //!< Fraction constructor
- fixed_base(const _fixed &x)ETL_ATTRIB_INLINE;
- fixed_base(value_type x,raw)ETL_ATTRIB_INLINE;
-
- T &data() ETL_ATTRIB_PURE ETL_ATTRIB_INLINE;
- const T &data()const ETL_ATTRIB_PURE ETL_ATTRIB_INLINE;
-
- const _fixed& operator+=(const _fixed &rhs) ETL_ATTRIB_INLINE;
- const _fixed& operator-=(const _fixed &rhs) ETL_ATTRIB_INLINE;
- template<typename U> const _fixed& operator*=(const U &rhs) ETL_ATTRIB_INLINE;
- template<typename U> const _fixed& operator/=(const U &rhs) ETL_ATTRIB_INLINE;
- const _fixed& operator*=(const _fixed &rhs) ETL_ATTRIB_INLINE;
- const _fixed& operator/=(const _fixed &rhs) ETL_ATTRIB_INLINE;
- const _fixed& operator*=(const int &rhs) ETL_ATTRIB_INLINE;
- const _fixed& operator/=(const int &rhs) ETL_ATTRIB_INLINE;
-
-
- template<typename U> _fixed operator+(const U &rhs)const ETL_ATTRIB_INLINE;
- template<typename U> _fixed operator-(const U &rhs)const ETL_ATTRIB_INLINE;
- template<typename U> _fixed operator*(const U &rhs)const ETL_ATTRIB_INLINE;
- template<typename U> _fixed operator/(const U &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator+(const _fixed &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator-(const _fixed &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator*(const _fixed &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator/(const _fixed &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator*(const int &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator/(const int &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator*(const float &rhs)const ETL_ATTRIB_INLINE;
- _fixed operator*(const double &rhs)const ETL_ATTRIB_INLINE;
-
- // Negation Operator
- _fixed operator-()const ETL_ATTRIB_INLINE;
-
- // Casting Operators
- inline operator float()const ETL_ATTRIB_INLINE;
- inline operator double()const ETL_ATTRIB_INLINE;
- inline operator long double()const ETL_ATTRIB_INLINE;
- inline operator int()const ETL_ATTRIB_INLINE;
- inline operator bool()const ETL_ATTRIB_INLINE;
-
- _fixed floor()const;
- _fixed ceil()const;
- _fixed round()const;
-
- bool operator==(const _fixed &rhs)const { return data()==rhs.data(); }
- bool operator!=(const _fixed &rhs)const { return data()!=rhs.data(); }
- bool operator<(const _fixed &rhs)const { return data()<rhs.data(); }
- bool operator>(const _fixed &rhs)const { return data()>rhs.data(); }
- bool operator<=(const _fixed &rhs)const { return data()<=rhs.data(); }
- bool operator>=(const _fixed &rhs)const { return data()>=rhs.data(); }
-};
-
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base()
-{}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const _fixed &x):_data(x._data)
-{}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const float &f):_data(static_cast<value_type>(f*_ONE()
-#ifdef ROUND_TO_NEAREST_INTEGER
- +0.5f
-#endif
- )) {}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const double &f):_data(static_cast<value_type>(f*_ONE()
-#ifdef ROUND_TO_NEAREST_INTEGER
- +0.5
-#endif
- )) {}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const long double &f):_data(static_cast<value_type>(f*_ONE()
-#ifdef ROUND_TO_NEAREST_INTEGER
- +0.5
-#endif
- )) {}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const int &i):_data(i<<FIXED_BITS)
-{}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(value_type x,raw):_data(x) { }
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::fixed_base(const int &n,const int &d):_data((n<<FIXED_BITS)/d) { }
-
-
-
-template <class T,unsigned int FIXED_BITS> inline bool
-fixed_base<T,FIXED_BITS>::_TYPE_SMALLER_THAN_INT()
-{
- return sizeof(T)<sizeof(int);
-}
-
-template <class T,unsigned int FIXED_BITS> inline bool
-fixed_base<T,FIXED_BITS>::_USING_ALL_BITS()
-{
- return sizeof(T)*8==FIXED_BITS;
-}
-
-template <class T,unsigned int FIXED_BITS> inline T
-fixed_base<T,FIXED_BITS>::_ONE()
-{
- return static_cast<T>((_USING_ALL_BITS()?~T(0):1<<FIXED_BITS));
-}
-
-template <class T,unsigned int FIXED_BITS> inline T
-fixed_base<T,FIXED_BITS>::_F_MASK()
-{
- return static_cast<T>(_USING_ALL_BITS()?~T(0):_ONE()-1);
-}
-
-template <class T,unsigned int FIXED_BITS> inline float
-fixed_base<T,FIXED_BITS>::_EPSILON()
-{
- return 1.0f/((float)_ONE()*2);
-}
-
-
-template <class T,unsigned int FIXED_BITS>T &
-fixed_base<T,FIXED_BITS>::data()
-{
- return _data;
-}
-
-template <class T,unsigned int FIXED_BITS>const T &
-fixed_base<T,FIXED_BITS>::data()const
-{
- return _data;
-}
-
-//! fixed+=fixed
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator+=(const _fixed &rhs)
-{
- _data+=rhs._data;
- return *this;
-}
-
-//! fixed-=fixed
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator-=(const _fixed &rhs)
-{
- _data-=rhs._data;
- return *this;
-}
-
-//! fixed*=fixed
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator*=(const _fixed &rhs)
-{
- if(_TYPE_SMALLER_THAN_INT())
- _data=static_cast<T>((int)_data*(int)rhs._data>>FIXED_BITS);
- else
- {
- _data*=rhs._data;
- _data>>=FIXED_BITS;
- }
-
- return *this;
-}
-
-//! fixed/=fixed
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator/=(const _fixed &rhs)
-{
- if(_TYPE_SMALLER_THAN_INT())
- _data=static_cast<T>((int)_data/(int)rhs._data<<FIXED_BITS);
- else
- {
- _data/=rhs._data;
- _data<<=FIXED_BITS;
- }
- return *this;
-}
-
-template <class T,unsigned int FIXED_BITS> template<typename U> const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator*=(const U &rhs)
-{
- return operator*=(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-template <class T,unsigned int FIXED_BITS> template<typename U> const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator/=(const U &rhs)
-{
- return operator/=(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-//! fixed*=int
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator*=(const int &rhs)
-{
- _data*=rhs; return *this;
-}
-
-//! fixed/=int
-template <class T,unsigned int FIXED_BITS>const fixed_base<T,FIXED_BITS> &
-fixed_base<T,FIXED_BITS>::operator/=(const int &rhs)
-{
- _data/=rhs; return *this;
-}
-
-
-
-
-
-
-
-//! fixed + fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator+(const _fixed &rhs)const
-{
- _fixed ret;
- ret._data=_data+rhs._data;
- return ret;
-}
-
-//! fixed - fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator-(const _fixed &rhs)const
-{
- _fixed ret;
- ret._data=_data-rhs._data;
- return ret;
-}
-
-//! fixed * fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator*(const _fixed &rhs)const
-{
- _fixed ret;
- ret._data=((_data*rhs._data)>>FIXED_BITS);
- return ret;
- //return reinterpret_cast<_fixed>((_data*rhs._data)>>FIXED_BITS);
-}
-
-//! fixed / fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator/(const _fixed &rhs)const
-{
- _fixed ret;
- ret._data=((_data/rhs._data)<<FIXED_BITS);
- return ret;
- //return reinterpret_cast<_fixed>((_data/rhs._data)<<FIXED_BITS);
-}
-
-//! fixed + ...
-template <class T,unsigned int FIXED_BITS> template<typename U> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator+(const U &rhs) const
-{
- return operator+(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-//! fixed - ...
-template <class T,unsigned int FIXED_BITS> template<typename U> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator-(const U &rhs) const
-{
- return operator-(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-//! fixed * ...
-template <class T,unsigned int FIXED_BITS> template<typename U> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator*(const U &rhs) const
-{
- return operator*(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-//! fixed / ...
-template <class T,unsigned int FIXED_BITS> template<typename U> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator/(const U &rhs) const
-{
- return operator/(fixed_base<T,FIXED_BITS>(rhs));
-}
-
-//! fixed * int
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator*(const int &rhs)const
-{
- _fixed ret;
- ret._data=_data*rhs;
- return ret;
- //return reinterpret_cast<_fixed>(_data*rhs);
-}
-
-//! fixed * float
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator*(const float &rhs)const
-{
- return (*this)*_fixed(rhs);
-}
-
-//! fixed * double
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator*(const double &rhs)const
-{
- return (*this)*_fixed(rhs);
-}
-
-
-//! fixed / int
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator/(const int &rhs)const
-{
- _fixed ret;
- ret._data=_data/rhs;
- return ret;
- //return reinterpret_cast<_fixed>(_data/rhs);
-}
-
-//! float * fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-operator*(const float& lhs, const fixed_base<T,FIXED_BITS> &rhs)
-{
- return rhs*lhs;
-}
-
-//! double * fixed
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-operator*(const double& lhs, const fixed_base<T,FIXED_BITS> &rhs)
-{
- return rhs*lhs;
-}
-
-
-
-
-
-
-// Negation Operator
-template <class T,unsigned int FIXED_BITS>fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator-()const
-{
- _fixed ret; ret._data=-_data; return ret;
-}
-
-// Casting Operators
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator float()const
-{
- return static_cast<float>(_data)/static_cast<float>(_ONE());
-}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator double()const
-{
- return static_cast<double>(_data)/static_cast<double>(_ONE());
-}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator long double()const
-{
- return static_cast<long double>(_data)/static_cast<long double>(_ONE());
-}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator int()const
-{
- return static_cast<int>(_data>>FIXED_BITS);
-}
-
-template <class T,unsigned int FIXED_BITS>
-fixed_base<T,FIXED_BITS>::operator bool()const
-{
- return static_cast<bool>(_data);
-}
-
-
-template <class T,unsigned int FIXED_BITS> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::floor()const
-{
- _fixed ret(*this);
- ret._data&=~_F_MASK();
- return ret;
-}
-
-template <class T,unsigned int FIXED_BITS> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::ceil()const
-{
- _fixed ret(*this);
- if(ret._data&_F_MASK())
- ret._data=(ret._data&~_F_MASK()) + _ONE();
- else
- ret._data&=~_F_MASK();
- return ret;
-}
-
-template <class T,unsigned int FIXED_BITS> fixed_base<T,FIXED_BITS>
-fixed_base<T,FIXED_BITS>::round()const
-{
- _fixed ret(*this);
- ret._data+=_ONE()>>1;
- ret._data&=~_F_MASK();
- return ret;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-typedef fixed_base<ETL_FIXED_TYPE,ETL_FIXED_BITS> fixed;
-
-_ETL_END_NAMESPACE
-
-_STD_BEGIN_NAMESPACE
-
-template <class T,unsigned int FIXED_BITS>
-inline _ETL::fixed_base<T,FIXED_BITS>
-ceil(const _ETL::fixed_base<T,FIXED_BITS> &rhs)
-{ return rhs.ceil(); }
-
-template <class T,unsigned int FIXED_BITS>
-_ETL::fixed_base<T,FIXED_BITS>
-floor(const _ETL::fixed_base<T,FIXED_BITS> &rhs)
-{ return rhs.floor(); }
-
-template <class T,unsigned int FIXED_BITS>
-_ETL::fixed_base<T,FIXED_BITS>
-round(const _ETL::fixed_base<T,FIXED_BITS> &rhs)
-{ return rhs.round(); }
-
-template <class T,unsigned int FIXED_BITS>
-_ETL::fixed_base<T,FIXED_BITS>
-abs(const _ETL::fixed_base<T,FIXED_BITS> &rhs)
-{ return rhs<_ETL::fixed_base<T,FIXED_BITS>(0)?-rhs:rhs; }
-
-_STD_END_NAMESPACE
-
-/*
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator==(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()==rhs.data(); }
-
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator!=(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()!=rhs.data(); }
-
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator>(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()>rhs.data(); }
-
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator<(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()<rhs.data(); }
-
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator>=(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()>=rhs.data(); }
-
-template <class T,unsigned int FIXED_BITS, typename U> bool
-operator<=(const _ETL::fixed_base<T,FIXED_BITS>& lhs, const _ETL::fixed_base<T,FIXED_BITS>& rhs)
-{ return lhs.data()<=rhs.data(); }
-*/
-
-
-#if defined(__GNUC__) && __GNUC__ == 3
-template <class T,unsigned int FIXED_BITS, typename U> U
-operator*(const U &a,const _ETL::fixed_base<T,FIXED_BITS> &b)
- { return a*static_cast<double>(b); }
-
-template <class T,unsigned int FIXED_BITS, typename U> U
-operator/(const U &a,const _ETL::fixed_base<T,FIXED_BITS> &b)
- { return a/static_cast<double>(b); }
-
-template <class T,unsigned int FIXED_BITS, typename U> U
-operator+(const U &a,const _ETL::fixed_base<T,FIXED_BITS> &b)
- { return a+static_cast<double>(b); }
-
-template <class T,unsigned int FIXED_BITS, typename U> U
-operator-(const U &a,const _ETL::fixed_base<T,FIXED_BITS> &b)
- { return a-static_cast<double>(b); }
-
-
-/*
-inline const float &
-operator*=(float &a,const _ETL::fixed &b)
- { a*=(float)b; return a; }
-
-inline const float &
-operator/=(float &a,const _ETL::fixed &b)
- { a/=(float)b; return a; }
-
-inline const float &
-operator-=(float &a,const _ETL::fixed &b)
- { a-=(float)b; return a; }
-
-inline const float &
-operator+=(float &a,const _ETL::fixed &b)
- { a+=(float)b; return a; }
-*/
-#endif
-
-/* === E N D =============================================================== */
-
-#endif