#pragma once // // FILE: float16.h // AUTHOR: Rob Tillaart // VERSION: 0.1.8 // PURPOSE: Arduino library to implement float16 data type. // half-precision floating point format, // used for efficient storage and transport. // URL: https://github.com/RobTillaart/float16 #include #define FLOAT16_LIB_VERSION (F("0.1.8")) // typedef uint16_t _fp16; class float16 { public: // Constructors float16(void) { _value = 0x0000; }; float16(float f); float16(const float16 &f) { _value = f._value; }; // Conversion float toFloat(void) const; // access the 2 byte representation. uint16_t getBinary() { return _value; }; void setBinary(uint16_t u) { _value = u; }; // Printable // size_t printTo(Print &p) const; void setDecimals(uint8_t d) { _decimals = d; }; uint8_t getDecimals() { return _decimals; }; // equalities bool operator==(const float16 &f); bool operator!=(const float16 &f); bool operator>(const float16 &f); bool operator>=(const float16 &f); bool operator<(const float16 &f); bool operator<=(const float16 &f); // negation float16 operator-(); // basic math float16 operator+(const float16 &f); float16 operator-(const float16 &f); float16 operator*(const float16 &f); float16 operator/(const float16 &f); float16 &operator+=(const float16 &f); float16 &operator-=(const float16 &f); float16 &operator*=(const float16 &f); float16 &operator/=(const float16 &f); // math helper functions int sign(); // 1 = positive 0 = zero -1 = negative. bool isZero(); bool isNaN(); bool isInf(); // CORE CONVERSION // should be private but for testing... float f16tof32(uint16_t) const; uint16_t f32tof16(float) const; private: uint8_t _decimals = 4; uint16_t _value; }; // -- END OF FILE --