aboutsummaryrefslogtreecommitdiffstats
path: root/CommonLibs/F16.h
diff options
context:
space:
mode:
Diffstat (limited to 'CommonLibs/F16.h')
-rw-r--r--CommonLibs/F16.h210
1 files changed, 0 insertions, 210 deletions
diff --git a/CommonLibs/F16.h b/CommonLibs/F16.h
deleted file mode 100644
index aa292f0..0000000
--- a/CommonLibs/F16.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-* Copyright 2009 Free Software Foundation, Inc.
-*
-* This software is distributed under the terms of the GNU Affero Public License.
-* See the COPYING file in the main directory for details.
-*
-* This use of this software may be subject to additional restrictions.
-* See the LEGAL file in the main directory for details.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program 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 Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-
-#ifndef F16_H
-#define F16_H
-
-#include <stdint.h>
-#include <ostream>
-
-
-
-/** Round a float to the appropriate F16 value. */
-inline int32_t _f16_round(float f)
-{
- if (f>0.0F) return (int32_t)(f+0.5F);
- if (f<0.0F) return (int32_t)(f-0.5F);
- return 0;
-}
-
-
-
-/** A class for F15.16 fixed point arithmetic with saturation. */
-class F16 {
-
-
- private:
-
- int32_t mV;
-
-
- public:
-
- F16() {}
-
- F16(int i) { mV = i<<16; }
- F16(float f) { mV = _f16_round(f*65536.0F); }
- F16(double f) { mV = _f16_round((float)f*65536.0F); }
-
- int32_t& raw() { return mV; }
- const int32_t& raw() const { return mV; }
-
- float f() const { return mV/65536.0F; }
-
- //operator float() const { return mV/65536.0F; }
- //operator int() const { return mV>>16; }
-
- F16 operator=(float f)
- {
- mV = _f16_round(f*65536.0F);
- return *this;
- }
-
- F16 operator=(int i)
- {
- mV = i<<16;
- return *this;
- }
-
- F16 operator=(const F16& other)
- {
- mV = other.mV;
- return mV;
- }
-
- F16 operator+(const F16& other) const
- {
- F16 retVal;
- retVal.mV = mV + other.mV;
- return retVal;
- }
-
- F16& operator+=(const F16& other)
- {
- mV += other.mV;
- return *this;
- }
-
- F16 operator-(const F16& other) const
- {
- F16 retVal;
- retVal.mV = mV - other.mV;
- return retVal;
- }
-
- F16& operator-=(const F16& other)
- {
- mV -= other.mV;
- return *this;
- }
-
- F16 operator*(const F16& other) const
- {
- F16 retVal;
- int64_t p = (int64_t)mV * (int64_t)other.mV;
- retVal.mV = p>>16;
- return retVal;
- }
-
- F16& operator*=(const F16& other)
- {
- int64_t p = (int64_t)mV * (int64_t)other.mV;
- mV = p>>16;
- return *this;
- }
-
- F16 operator*(float f) const
- {
- F16 retVal;
- retVal.mV = mV * f;
- return retVal;
- }
-
- F16& operator*=(float f)
- {
- mV *= f;
- return *this;
- }
-
- F16 operator/(const F16& other) const
- {
- F16 retVal;
- int64_t pV = (int64_t)mV << 16;
- retVal.mV = pV / other.mV;
- return retVal;
- }
-
- F16& operator/=(const F16& other)
- {
- int64_t pV = (int64_t)mV << 16;
- mV = pV / other.mV;
- return *this;
- }
-
- F16 operator/(float f) const
- {
- F16 retVal;
- retVal.mV = mV / f;
- return retVal;
- }
-
- F16& operator/=(float f)
- {
- mV /= f;
- return *this;
- }
-
- bool operator>(const F16& other) const
- {
- return mV>other.mV;
- }
-
- bool operator<(const F16& other) const
- {
- return mV<other.mV;
- }
-
- bool operator==(const F16& other) const
- {
- return mV==other.mV;
- }
-
- bool operator>(float f) const
- {
- return (mV/65536.0F) > f;
- }
-
- bool operator<(float f) const
- {
- return (mV/65536.0F) < f;
- }
-
- bool operator==(float f) const
- {
- return (mV/65536.0F) == f;
- }
-
-};
-
-
-
-inline std::ostream& operator<<(std::ostream& os, const F16& v)
-{
- os << v.f();
- return os;
-}
-
-#endif
-