From 24c7aa4846e5dd4408aa056c8ab824b42f7aa139 Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Tue, 11 Feb 2020 10:57:50 +0100 Subject: [PATCH] integrated support for binary16 = 16bit floating point numbers via half.hpp, IEEE 754-based half-precision floating-point library --- csv/VehicleSpeed_HS.csv | 599 --- ...raw) daten - Das deutsche Python-Forum.pdf | Bin 0 -> 792880 bytes eatit | Bin 53528 -> 75680 bytes makefile | 4 +- src/half.hpp | 4575 +++++++++++++++++ src/main.cpp | 18 +- src/raweat.hpp | 51 +- 7 files changed, 4614 insertions(+), 633 deletions(-) create mode 100644 doc/Einlesen von IMC Famos (.dat, .raw) daten - Das deutsche Python-Forum.pdf create mode 100644 src/half.hpp diff --git a/csv/VehicleSpeed_HS.csv b/csv/VehicleSpeed_HS.csv index 275479f..e69de29 100644 --- a/csv/VehicleSpeed_HS.csv +++ b/csv/VehicleSpeed_HS.csv @@ -1,599 +0,0 @@ -5.93 -5.92 -5.9 -5.9 -5.89 -5.89 -5.87 -5.84 -5.83 -5.81 -5.79 -5.78 -5.76 -5.75 -5.74 -5.74 -5.73 -5.73 -5.72 -5.71 -5.71 -5.69 -5.69 -5.68 -5.66 -5.63 -5.62 -5.6 -5.58 -5.57 -5.55 -5.53 -5.51 -5.5 -5.47 -5.45 -5.42 -5.4 -5.38 -5.35 -5.31 -5.28 -5.27 -5.24 -5.19 -5.16 -5.14 -7.67 -5.06 -5.02 -5 -4.97 -4.92 -4.88 -4.86 -4.82 -4.77 -4.74 -4.7 -4.66 -4.62 -4.58 -4.54 -4.48 -4.43 -4.37 -4.31 -4.24 -4.18 -4.13 -4.06 -3.98 -3.91 -3.83 -3.77 -3.72 -3.64 -3.57 -3.51 -3.44 -3.39 -3.33 -3.28 -3.24 -3.17 -3.11 -3.06 -3.01 -2.96 -2.92 -2.88 -2.83 -2.79 -2.75 -2.71 -2.68 -2.64 -2.61 -2.59 -2.56 -5.11 -2.52 -2.51 -2.49 -2.48 -2.46 -2.46 -2.45 -2.44 -2.43 -2.42 -2.41 -2.4 -2.41 -2.39 -2.38 -2.35 -2.31 -2.26 -2.21 -2.16 -2.1 -2.05 -2.01 -1.94 -1.91 -1.84 -1.77 -1.73 -1.65 -1.59 -1.58 -1.55 -1.52 -1.53 -1.52 -1.5 -1.49 -1.47 -1.47 -1.47 -1.47 -1.48 -1.48 -1.48 -1.48 -1.48 -1.46 -1.44 -1.44 -1.43 -1.41 -1.41 -1.4 -1.38 -1.37 -1.36 -1.35 -1.33 -1.32 -1.31 -1.28 -1.27 -1.26 -1.24 -1.22 -1.21 -1.21 -1.19 -1.17 -1.16 -1.16 -1.13 -1.12 -1.12 -1.11 -1.09 -1.08 -1.07 -1.07 -1.05 -1.04 -1.03 -1.02 -1.01 -0.99 -0.98 -0.96 -0.95 -0.94 -0.9 -0.87 -0.84 -0.8 -0.79 -0.78 -0.75 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 diff --git a/doc/Einlesen von IMC Famos (.dat, .raw) daten - Das deutsche Python-Forum.pdf b/doc/Einlesen von IMC Famos (.dat, .raw) daten - Das deutsche Python-Forum.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c48edd7e1bfb93c03d87607227323d2d06090742 GIT binary patch literal 792880 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%0DPfcS9z=A9;t%71%Li0E;s@^$;$}ZGgV9FZ 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%0DgA<`*F=MY`*}ezN(!@wLlzNn29}bLdE&F)D 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ℑX&L;MzCKlL?4)db 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 literal 0 HcmV?d00001 diff --git a/eatit b/eatit index 2413225e08ce52cca90b1d732c20984d2c6dcdfc..96e556e9a95b11eaedaf8e34847c5003fdf89d59 100755 GIT binary patch literal 75680 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 `a=%Q{|36({ji4y#ssGOS6y4}$ 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 O8jXeea7qUJ0R9iVWT80# literal 53528 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

g|(0cAFQS)b`D69tu1t+#>MkM7xO9UvHQ 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 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// Version 2.1.0 + +/// \file +/// Main header file for half-precision functionality. + +#ifndef HALF_HALF_HPP +#define HALF_HALF_HPP + +#define HALF_GCC_VERSION (__GNUC__*100+__GNUC_MINOR__) + +#if defined(__INTEL_COMPILER) + #define HALF_ICC_VERSION __INTEL_COMPILER +#elif defined(__ICC) + #define HALF_ICC_VERSION __ICC +#elif defined(__ICL) + #define HALF_ICC_VERSION __ICL +#else + #define HALF_ICC_VERSION 0 +#endif + +// check C++11 language features +#if defined(__clang__) // clang + #if __has_feature(cxx_static_assert) && !defined(HALF_ENABLE_CPP11_STATIC_ASSERT) + #define HALF_ENABLE_CPP11_STATIC_ASSERT 1 + #endif + #if __has_feature(cxx_constexpr) && !defined(HALF_ENABLE_CPP11_CONSTEXPR) + #define HALF_ENABLE_CPP11_CONSTEXPR 1 + #endif + #if __has_feature(cxx_noexcept) && !defined(HALF_ENABLE_CPP11_NOEXCEPT) + #define HALF_ENABLE_CPP11_NOEXCEPT 1 + #endif + #if __has_feature(cxx_user_literals) && !defined(HALF_ENABLE_CPP11_USER_LITERALS) + #define HALF_ENABLE_CPP11_USER_LITERALS 1 + #endif + #if __has_feature(cxx_thread_local) && !defined(HALF_ENABLE_CPP11_THREAD_LOCAL) + #define HALF_ENABLE_CPP11_THREAD_LOCAL 1 + #endif + #if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) && !defined(HALF_ENABLE_CPP11_LONG_LONG) + #define HALF_ENABLE_CPP11_LONG_LONG 1 + #endif +#elif HALF_ICC_VERSION && defined(__INTEL_CXX11_MODE__) // Intel C++ + #if HALF_ICC_VERSION >= 1500 && !defined(HALF_ENABLE_CPP11_THREAD_LOCAL) + #define HALF_ENABLE_CPP11_THREAD_LOCAL 1 + #endif + #if HALF_ICC_VERSION >= 1500 && !defined(HALF_ENABLE_CPP11_USER_LITERALS) + #define HALF_ENABLE_CPP11_USER_LITERALS 1 + #endif + #if HALF_ICC_VERSION >= 1400 && !defined(HALF_ENABLE_CPP11_CONSTEXPR) + #define HALF_ENABLE_CPP11_CONSTEXPR 1 + #endif + #if HALF_ICC_VERSION >= 1400 && !defined(HALF_ENABLE_CPP11_NOEXCEPT) + #define HALF_ENABLE_CPP11_NOEXCEPT 1 + #endif + #if HALF_ICC_VERSION >= 1110 && !defined(HALF_ENABLE_CPP11_STATIC_ASSERT) + #define HALF_ENABLE_CPP11_STATIC_ASSERT 1 + #endif + #if HALF_ICC_VERSION >= 1110 && !defined(HALF_ENABLE_CPP11_LONG_LONG) + #define HALF_ENABLE_CPP11_LONG_LONG 1 + #endif +#elif defined(__GNUC__) // gcc + #if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L + #if HALF_GCC_VERSION >= 408 && !defined(HALF_ENABLE_CPP11_THREAD_LOCAL) + #define HALF_ENABLE_CPP11_THREAD_LOCAL 1 + #endif + #if HALF_GCC_VERSION >= 407 && !defined(HALF_ENABLE_CPP11_USER_LITERALS) + #define HALF_ENABLE_CPP11_USER_LITERALS 1 + #endif + #if HALF_GCC_VERSION >= 406 && !defined(HALF_ENABLE_CPP11_CONSTEXPR) + #define HALF_ENABLE_CPP11_CONSTEXPR 1 + #endif + #if HALF_GCC_VERSION >= 406 && !defined(HALF_ENABLE_CPP11_NOEXCEPT) + #define HALF_ENABLE_CPP11_NOEXCEPT 1 + #endif + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_STATIC_ASSERT) + #define HALF_ENABLE_CPP11_STATIC_ASSERT 1 + #endif + #if !defined(HALF_ENABLE_CPP11_LONG_LONG) + #define HALF_ENABLE_CPP11_LONG_LONG 1 + #endif + #endif + #define HALF_TWOS_COMPLEMENT_INT 1 +#elif defined(_MSC_VER) // Visual C++ + #if _MSC_VER >= 1900 && !defined(HALF_ENABLE_CPP11_THREAD_LOCAL) + #define HALF_ENABLE_CPP11_THREAD_LOCAL 1 + #endif + #if _MSC_VER >= 1900 && !defined(HALF_ENABLE_CPP11_USER_LITERALS) + #define HALF_ENABLE_CPP11_USER_LITERALS 1 + #endif + #if _MSC_VER >= 1900 && !defined(HALF_ENABLE_CPP11_CONSTEXPR) + #define HALF_ENABLE_CPP11_CONSTEXPR 1 + #endif + #if _MSC_VER >= 1900 && !defined(HALF_ENABLE_CPP11_NOEXCEPT) + #define HALF_ENABLE_CPP11_NOEXCEPT 1 + #endif + #if _MSC_VER >= 1600 && !defined(HALF_ENABLE_CPP11_STATIC_ASSERT) + #define HALF_ENABLE_CPP11_STATIC_ASSERT 1 + #endif + #if _MSC_VER >= 1310 && !defined(HALF_ENABLE_CPP11_LONG_LONG) + #define HALF_ENABLE_CPP11_LONG_LONG 1 + #endif + #define HALF_TWOS_COMPLEMENT_INT 1 + #define HALF_POP_WARNINGS 1 + #pragma warning(push) + #pragma warning(disable : 4099 4127 4146) //struct vs class, constant in if, negative unsigned +#endif + +// check C++11 library features +#include +#if defined(_LIBCPP_VERSION) // libc++ + #if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103 + #ifndef HALF_ENABLE_CPP11_TYPE_TRAITS + #define HALF_ENABLE_CPP11_TYPE_TRAITS 1 + #endif + #ifndef HALF_ENABLE_CPP11_CSTDINT + #define HALF_ENABLE_CPP11_CSTDINT 1 + #endif + #ifndef HALF_ENABLE_CPP11_CMATH + #define HALF_ENABLE_CPP11_CMATH 1 + #endif + #ifndef HALF_ENABLE_CPP11_HASH + #define HALF_ENABLE_CPP11_HASH 1 + #endif + #ifndef HALF_ENABLE_CPP11_CFENV + #define HALF_ENABLE_CPP11_CFENV 1 + #endif + #endif +#elif defined(__GLIBCXX__) // libstdc++ + #if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103 + #ifdef __clang__ + #if __GLIBCXX__ >= 20080606 && !defined(HALF_ENABLE_CPP11_TYPE_TRAITS) + #define HALF_ENABLE_CPP11_TYPE_TRAITS 1 + #endif + #if __GLIBCXX__ >= 20080606 && !defined(HALF_ENABLE_CPP11_CSTDINT) + #define HALF_ENABLE_CPP11_CSTDINT 1 + #endif + #if __GLIBCXX__ >= 20080606 && !defined(HALF_ENABLE_CPP11_CMATH) + #define HALF_ENABLE_CPP11_CMATH 1 + #endif + #if __GLIBCXX__ >= 20080606 && !defined(HALF_ENABLE_CPP11_HASH) + #define HALF_ENABLE_CPP11_HASH 1 + #endif + #if __GLIBCXX__ >= 20080606 && !defined(HALF_ENABLE_CPP11_CFENV) + #define HALF_ENABLE_CPP11_CFENV 1 + #endif + #else + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_TYPE_TRAITS) + #define HALF_ENABLE_CPP11_TYPE_TRAITS 1 + #endif + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_CSTDINT) + #define HALF_ENABLE_CPP11_CSTDINT 1 + #endif + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_CMATH) + #define HALF_ENABLE_CPP11_CMATH 1 + #endif + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_HASH) + #define HALF_ENABLE_CPP11_HASH 1 + #endif + #if HALF_GCC_VERSION >= 403 && !defined(HALF_ENABLE_CPP11_CFENV) + #define HALF_ENABLE_CPP11_CFENV 1 + #endif + #endif + #endif +#elif defined(_CPPLIB_VER) // Dinkumware/Visual C++ + #if _CPPLIB_VER >= 520 && !defined(HALF_ENABLE_CPP11_TYPE_TRAITS) + #define HALF_ENABLE_CPP11_TYPE_TRAITS 1 + #endif + #if _CPPLIB_VER >= 520 && !defined(HALF_ENABLE_CPP11_CSTDINT) + #define HALF_ENABLE_CPP11_CSTDINT 1 + #endif + #if _CPPLIB_VER >= 520 && !defined(HALF_ENABLE_CPP11_HASH) + #define HALF_ENABLE_CPP11_HASH 1 + #endif + #if _CPPLIB_VER >= 610 && !defined(HALF_ENABLE_CPP11_CMATH) + #define HALF_ENABLE_CPP11_CMATH 1 + #endif + #if _CPPLIB_VER >= 610 && !defined(HALF_ENABLE_CPP11_CFENV) + #define HALF_ENABLE_CPP11_CFENV 1 + #endif +#endif +#undef HALF_GCC_VERSION +#undef HALF_ICC_VERSION + +// any error throwing C++ exceptions? +#if defined(HALF_ERRHANDLING_THROW_INVALID) || defined(HALF_ERRHANDLING_THROW_DIVBYZERO) || defined(HALF_ERRHANDLING_THROW_OVERFLOW) || defined(HALF_ERRHANDLING_THROW_UNDERFLOW) || defined(HALF_ERRHANDLING_THROW_INEXACT) +#define HALF_ERRHANDLING_THROWS 1 +#endif + +// any error handling enabled? +#define HALF_ERRHANDLING (HALF_ERRHANDLING_FLAGS||HALF_ERRHANDLING_ERRNO||HALF_ERRHANDLING_FENV||HALF_ERRHANDLING_THROWS) + +#if HALF_ERRHANDLING + #define HALF_UNUSED_NOERR(name) name +#else + #define HALF_UNUSED_NOERR(name) +#endif + +// support constexpr +#if HALF_ENABLE_CPP11_CONSTEXPR + #define HALF_CONSTEXPR constexpr + #define HALF_CONSTEXPR_CONST constexpr + #if HALF_ERRHANDLING + #define HALF_CONSTEXPR_NOERR + #else + #define HALF_CONSTEXPR_NOERR constexpr + #endif +#else + #define HALF_CONSTEXPR + #define HALF_CONSTEXPR_CONST const + #define HALF_CONSTEXPR_NOERR +#endif + +// support noexcept +#if HALF_ENABLE_CPP11_NOEXCEPT + #define HALF_NOEXCEPT noexcept + #define HALF_NOTHROW noexcept +#else + #define HALF_NOEXCEPT + #define HALF_NOTHROW throw() +#endif + +// support thread storage +#if HALF_ENABLE_CPP11_THREAD_LOCAL + #define HALF_THREAD_LOCAL thread_local +#else + #define HALF_THREAD_LOCAL static +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if HALF_ENABLE_CPP11_TYPE_TRAITS + #include +#endif +#if HALF_ENABLE_CPP11_CSTDINT + #include +#endif +#if HALF_ERRHANDLING_ERRNO + #include +#endif +#if HALF_ENABLE_CPP11_CFENV + #include +#endif +#if HALF_ENABLE_CPP11_HASH + #include +#endif +#if HALF_ENABLE_F16C_INTRINSICS + #include +#endif + + +#ifndef HALF_ENABLE_F16C_INTRINSICS + /// Enable F16C intruction set intrinsics. + /// Defining this to 1 enables the use of [F16C compiler intrinsics](https://en.wikipedia.org/wiki/F16C) for converting between + /// half-precision and single-precision values which may result in improved performance. This will not perform additional checks + /// for support of the F16C instruction set, so an appropriate target platform is required when enabling this feature. + /// + /// Unless predefined it will be enabled automatically when the `__F16C__` symbol is defined, which some compilers do on supporting platforms. + #define HALF_ENABLE_F16C_INTRINSICS __F16C__ +#endif + +#ifdef HALF_DOXYGEN_ONLY +/// Type for internal floating-point computations. +/// This can be predefined to a built-in floating-point type (`float`, `double` or `long double`) to override the internal +/// half-precision implementation to use this type for computing arithmetic operations and mathematical function (if available). +/// This can result in improved performance for arithmetic operators and mathematical functions but might cause results to +/// deviate from the specified half-precision rounding mode and inhibits proper detection of half-precision exceptions. +#define HALF_ARITHMETIC_TYPE (undefined) + +/// Enable internal exception flags. +/// Defining this to 1 causes operations on half-precision values to raise internal floating-point exception flags according to +/// the IEEE 754 standard. These can then be cleared and checked with clearexcept(), testexcept(). +#define HALF_ERRHANDLING_FLAGS 0 + +/// Enable exception propagation to `errno`. +/// Defining this to 1 causes operations on half-precision values to propagate floating-point exceptions to +/// [errno](https://en.cppreference.com/w/cpp/error/errno) from ``. Specifically this will propagate domain errors as +/// [EDOM](https://en.cppreference.com/w/cpp/error/errno_macros) and pole, overflow and underflow errors as +/// [ERANGE](https://en.cppreference.com/w/cpp/error/errno_macros). Inexact errors won't be propagated. +#define HALF_ERRHANDLING_ERRNO 0 + +/// Enable exception propagation to built-in floating-point platform. +/// Defining this to 1 causes operations on half-precision values to propagate floating-point exceptions to the built-in +/// single- and double-precision implementation's exception flags using the +/// [C++11 floating-point environment control](https://en.cppreference.com/w/cpp/numeric/fenv) from ``. However, this +/// does not work in reverse and single- or double-precision exceptions will not raise the corresponding half-precision +/// exception flags, nor will explicitly clearing flags clear the corresponding built-in flags. +#define HALF_ERRHANDLING_FENV 0 + +/// Throw C++ exception on domain errors. +/// Defining this to a string literal causes operations on half-precision values to throw a +/// [std::domain_error](https://en.cppreference.com/w/cpp/error/domain_error) with the specified message on domain errors. +#define HALF_ERRHANDLING_THROW_INVALID (undefined) + +/// Throw C++ exception on pole errors. +/// Defining this to a string literal causes operations on half-precision values to throw a +/// [std::domain_error](https://en.cppreference.com/w/cpp/error/domain_error) with the specified message on pole errors. +#define HALF_ERRHANDLING_THROW_DIVBYZERO (undefined) + +/// Throw C++ exception on overflow errors. +/// Defining this to a string literal causes operations on half-precision values to throw a +/// [std::overflow_error](https://en.cppreference.com/w/cpp/error/overflow_error) with the specified message on overflows. +#define HALF_ERRHANDLING_THROW_OVERFLOW (undefined) + +/// Throw C++ exception on underflow errors. +/// Defining this to a string literal causes operations on half-precision values to throw a +/// [std::underflow_error](https://en.cppreference.com/w/cpp/error/underflow_error) with the specified message on underflows. +#define HALF_ERRHANDLING_THROW_UNDERFLOW (undefined) + +/// Throw C++ exception on rounding errors. +/// Defining this to 1 causes operations on half-precision values to throw a +/// [std::range_error](https://en.cppreference.com/w/cpp/error/range_error) with the specified message on general rounding errors. +#define HALF_ERRHANDLING_THROW_INEXACT (undefined) +#endif + +#ifndef HALF_ERRHANDLING_OVERFLOW_TO_INEXACT +/// Raise INEXACT exception on overflow. +/// Defining this to 1 (default) causes overflow errors to automatically raise inexact exceptions in addition. +/// These will be raised after any possible handling of the underflow exception. +#define HALF_ERRHANDLING_OVERFLOW_TO_INEXACT 1 +#endif + +#ifndef HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT +/// Raise INEXACT exception on underflow. +/// Defining this to 1 (default) causes underflow errors to automatically raise inexact exceptions in addition. +/// These will be raised after any possible handling of the underflow exception. +/// +/// **Note:** This will actually cause underflow (and the accompanying inexact) exceptions to be raised *only* when the result +/// is inexact, while if disabled bare underflow errors will be raised for *any* (possibly exact) subnormal result. +#define HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT 1 +#endif + +/// Default rounding mode. +/// This specifies the rounding mode used for all conversions between [half](\ref half_float::half)s and more precise types +/// (unless using half_cast() and specifying the rounding mode directly) as well as in arithmetic operations and mathematical +/// functions. It can be redefined (before including half.hpp) to one of the standard rounding modes using their respective +/// constants or the equivalent values of +/// [std::float_round_style](https://en.cppreference.com/w/cpp/types/numeric_limits/float_round_style): +/// +/// `std::float_round_style` | value | rounding +/// ---------------------------------|-------|------------------------- +/// `std::round_indeterminate` | -1 | fastest +/// `std::round_toward_zero` | 0 | toward zero +/// `std::round_to_nearest` | 1 | to nearest (default) +/// `std::round_toward_infinity` | 2 | toward positive infinity +/// `std::round_toward_neg_infinity` | 3 | toward negative infinity +/// +/// By default this is set to `1` (`std::round_to_nearest`), which rounds results to the nearest representable value. It can even +/// be set to [std::numeric_limits::round_style](https://en.cppreference.com/w/cpp/types/numeric_limits/round_style) to synchronize +/// the rounding mode with that of the built-in single-precision implementation (which is likely `std::round_to_nearest`, though). +#ifndef HALF_ROUND_STYLE + #define HALF_ROUND_STYLE 1 // = std::round_to_nearest +#endif + +/// Value signaling overflow. +/// In correspondence with `HUGE_VAL[F|L]` from `` this symbol expands to a positive value signaling the overflow of an +/// operation, in particular it just evaluates to positive infinity. +/// +/// **See also:** Documentation for [HUGE_VAL](https://en.cppreference.com/w/cpp/numeric/math/HUGE_VAL) +#define HUGE_VALH std::numeric_limits::infinity() + +/// Fast half-precision fma function. +/// This symbol is defined if the fma() function generally executes as fast as, or faster than, a separate +/// half-precision multiplication followed by an addition, which is always the case. +/// +/// **See also:** Documentation for [FP_FAST_FMA](https://en.cppreference.com/w/cpp/numeric/math/fma) +#define FP_FAST_FMAH 1 + +/// Half rounding mode. +/// In correspondence with `FLT_ROUNDS` from `` this symbol expands to the rounding mode used for +/// half-precision operations. It is an alias for [HALF_ROUND_STYLE](\ref HALF_ROUND_STYLE). +/// +/// **See also:** Documentation for [FLT_ROUNDS](https://en.cppreference.com/w/cpp/types/climits/FLT_ROUNDS) +#define HLF_ROUNDS HALF_ROUND_STYLE + +#ifndef FP_ILOGB0 + #define FP_ILOGB0 INT_MIN +#endif +#ifndef FP_ILOGBNAN + #define FP_ILOGBNAN INT_MAX +#endif +#ifndef FP_SUBNORMAL + #define FP_SUBNORMAL 0 +#endif +#ifndef FP_ZERO + #define FP_ZERO 1 +#endif +#ifndef FP_NAN + #define FP_NAN 2 +#endif +#ifndef FP_INFINITE + #define FP_INFINITE 3 +#endif +#ifndef FP_NORMAL + #define FP_NORMAL 4 +#endif + +#if !HALF_ENABLE_CPP11_CFENV && !defined(FE_ALL_EXCEPT) + #define FE_INVALID 0x10 + #define FE_DIVBYZERO 0x08 + #define FE_OVERFLOW 0x04 + #define FE_UNDERFLOW 0x02 + #define FE_INEXACT 0x01 + #define FE_ALL_EXCEPT (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW|FE_INEXACT) +#endif + + +/// Main namespace for half-precision functionality. +/// This namespace contains all the functionality provided by the library. +namespace half_float +{ + class half; + +#if HALF_ENABLE_CPP11_USER_LITERALS + /// Library-defined half-precision literals. + /// Import this namespace to enable half-precision floating-point literals: + /// ~~~~{.cpp} + /// using namespace half_float::literal; + /// half_float::half = 4.2_h; + /// ~~~~ + namespace literal + { + half operator "" _h(long double); + } +#endif + + /// \internal + /// \brief Implementation details. + namespace detail + { + #if HALF_ENABLE_CPP11_TYPE_TRAITS + /// Conditional type. + template struct conditional : std::conditional {}; + + /// Helper for tag dispatching. + template struct bool_type : std::integral_constant {}; + using std::true_type; + using std::false_type; + + /// Type traits for floating-point types. + template struct is_float : std::is_floating_point {}; + #else + /// Conditional type. + template struct conditional { typedef T type; }; + template struct conditional { typedef F type; }; + + /// Helper for tag dispatching. + template struct bool_type {}; + typedef bool_type true_type; + typedef bool_type false_type; + + /// Type traits for floating-point types. + template struct is_float : false_type {}; + template struct is_float : is_float {}; + template struct is_float : is_float {}; + template struct is_float : is_float {}; + template<> struct is_float : true_type {}; + template<> struct is_float : true_type {}; + template<> struct is_float : true_type {}; + #endif + + /// Type traits for floating-point bits. + template struct bits { typedef unsigned char type; }; + template struct bits : bits {}; + template struct bits : bits {}; + template struct bits : bits {}; + + #if HALF_ENABLE_CPP11_CSTDINT + /// Unsigned integer of (at least) 16 bits width. + typedef std::uint_least16_t uint16; + + /// Fastest unsigned integer of (at least) 32 bits width. + typedef std::uint_fast32_t uint32; + + /// Fastest signed integer of (at least) 32 bits width. + typedef std::int_fast32_t int32; + + /// Unsigned integer of (at least) 32 bits width. + template<> struct bits { typedef std::uint_least32_t type; }; + + /// Unsigned integer of (at least) 64 bits width. + template<> struct bits { typedef std::uint_least64_t type; }; + #else + /// Unsigned integer of (at least) 16 bits width. + typedef unsigned short uint16; + + /// Fastest unsigned integer of (at least) 32 bits width. + typedef unsigned long uint32; + + /// Fastest unsigned integer of (at least) 32 bits width. + typedef long int32; + + /// Unsigned integer of (at least) 32 bits width. + template<> struct bits : conditional::digits>=32,unsigned int,unsigned long> {}; + + #if HALF_ENABLE_CPP11_LONG_LONG + /// Unsigned integer of (at least) 64 bits width. + template<> struct bits : conditional::digits>=64,unsigned long,unsigned long long> {}; + #else + /// Unsigned integer of (at least) 64 bits width. + template<> struct bits { typedef unsigned long type; }; + #endif + #endif + + #ifdef HALF_ARITHMETIC_TYPE + /// Type to use for arithmetic computations and mathematic functions internally. + typedef HALF_ARITHMETIC_TYPE internal_t; + #endif + + /// Tag type for binary construction. + struct binary_t {}; + + /// Tag for binary construction. + HALF_CONSTEXPR_CONST binary_t binary = binary_t(); + + /// \name Implementation defined classification and arithmetic + /// \{ + + /// Check for infinity. + /// \tparam T argument type (builtin floating-point type) + /// \param arg value to query + /// \retval true if infinity + /// \retval false else + template bool builtin_isinf(T arg) + { + #if HALF_ENABLE_CPP11_CMATH + return std::isinf(arg); + #elif defined(_MSC_VER) + return !::_finite(static_cast(arg)) && !::_isnan(static_cast(arg)); + #else + return arg == std::numeric_limits::infinity() || arg == -std::numeric_limits::infinity(); + #endif + } + + /// Check for NaN. + /// \tparam T argument type (builtin floating-point type) + /// \param arg value to query + /// \retval true if not a number + /// \retval false else + template bool builtin_isnan(T arg) + { + #if HALF_ENABLE_CPP11_CMATH + return std::isnan(arg); + #elif defined(_MSC_VER) + return ::_isnan(static_cast(arg)) != 0; + #else + return arg != arg; + #endif + } + + /// Check sign. + /// \tparam T argument type (builtin floating-point type) + /// \param arg value to query + /// \retval true if signbit set + /// \retval false else + template bool builtin_signbit(T arg) + { + #if HALF_ENABLE_CPP11_CMATH + return std::signbit(arg); + #else + return arg < T() || (arg == T() && T(1)/arg < T()); + #endif + } + + /// Platform-independent sign mask. + /// \param arg integer value in two's complement + /// \retval -1 if \a arg negative + /// \retval 0 if \a arg positive + inline uint32 sign_mask(uint32 arg) + { + static const int N = std::numeric_limits::digits - 1; + #if HALF_TWOS_COMPLEMENT_INT + return static_cast(arg) >> N; + #else + return -((arg>>N)&1); + #endif + } + + /// Platform-independent arithmetic right shift. + /// \param arg integer value in two's complement + /// \param i shift amount (at most 31) + /// \return \a arg right shifted for \a i bits with possible sign extension + inline uint32 arithmetic_shift(uint32 arg, int i) + { + #if HALF_TWOS_COMPLEMENT_INT + return static_cast(arg) >> i; + #else + return static_cast(arg)/(static_cast(1)<>(std::numeric_limits::digits-1))&1); + #endif + } + + /// \} + /// \name Error handling + /// \{ + + /// Internal exception flags. + /// \return reference to global exception flags + inline int& errflags() { HALF_THREAD_LOCAL int flags = 0; return flags; } + + /// Raise floating-point exception. + /// \param flags exceptions to raise + /// \param cond condition to raise exceptions for + inline void raise(int HALF_UNUSED_NOERR(flags), bool HALF_UNUSED_NOERR(cond) = true) + { + #if HALF_ERRHANDLING + if(!cond) + return; + #if HALF_ERRHANDLING_FLAGS + errflags() |= flags; + #endif + #if HALF_ERRHANDLING_ERRNO + if(flags & FE_INVALID) + errno = EDOM; + else if(flags & (FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW)) + errno = ERANGE; + #endif + #if HALF_ERRHANDLING_FENV && HALF_ENABLE_CPP11_CFENV + std::feraiseexcept(flags); + #endif + #ifdef HALF_ERRHANDLING_THROW_INVALID + if(flags & FE_INVALID) + throw std::domain_error(HALF_ERRHANDLING_THROW_INVALID); + #endif + #ifdef HALF_ERRHANDLING_THROW_DIVBYZERO + if(flags & FE_DIVBYZERO) + throw std::domain_error(HALF_ERRHANDLING_THROW_DIVBYZERO); + #endif + #ifdef HALF_ERRHANDLING_THROW_OVERFLOW + if(flags & FE_OVERFLOW) + throw std::overflow_error(HALF_ERRHANDLING_THROW_OVERFLOW); + #endif + #ifdef HALF_ERRHANDLING_THROW_UNDERFLOW + if(flags & FE_UNDERFLOW) + throw std::underflow_error(HALF_ERRHANDLING_THROW_UNDERFLOW); + #endif + #ifdef HALF_ERRHANDLING_THROW_INEXACT + if(flags & FE_INEXACT) + throw std::range_error(HALF_ERRHANDLING_THROW_INEXACT); + #endif + #if HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT + if((flags & FE_UNDERFLOW) && !(flags & FE_INEXACT)) + raise(FE_INEXACT); + #endif + #if HALF_ERRHANDLING_OVERFLOW_TO_INEXACT + if((flags & FE_OVERFLOW) && !(flags & FE_INEXACT)) + raise(FE_INEXACT); + #endif + #endif + } + + /// Check and signal for any NaN. + /// \param x first half-precision value to check + /// \param y second half-precision value to check + /// \retval true if either \a x or \a y is NaN + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool compsignal(unsigned int x, unsigned int y) + { + #if HALF_ERRHANDLING + raise(FE_INVALID, (x&0x7FFF)>0x7C00 || (y&0x7FFF)>0x7C00); + #endif + return (x&0x7FFF) > 0x7C00 || (y&0x7FFF) > 0x7C00; + } + + /// Signal and silence signaling NaN. + /// \param nan half-precision NaN value + /// \return quiet NaN + /// \exception FE_INVALID if \a nan is signaling NaN + inline HALF_CONSTEXPR_NOERR unsigned int signal(unsigned int nan) + { + #if HALF_ERRHANDLING + raise(FE_INVALID, !(nan&0x200)); + #endif + return nan | 0x200; + } + + /// Signal and silence signaling NaNs. + /// \param x first half-precision value to check + /// \param y second half-precision value to check + /// \return quiet NaN + /// \exception FE_INVALID if \a x or \a y is signaling NaN + inline HALF_CONSTEXPR_NOERR unsigned int signal(unsigned int x, unsigned int y) + { + #if HALF_ERRHANDLING + raise(FE_INVALID, ((x&0x7FFF)>0x7C00 && !(x&0x200)) || ((y&0x7FFF)>0x7C00 && !(y&0x200))); + #endif + return ((x&0x7FFF)>0x7C00) ? (x|0x200) : (y|0x200); + } + + /// Signal and silence signaling NaNs. + /// \param x first half-precision value to check + /// \param y second half-precision value to check + /// \param z third half-precision value to check + /// \return quiet NaN + /// \exception FE_INVALID if \a x, \a y or \a z is signaling NaN + inline HALF_CONSTEXPR_NOERR unsigned int signal(unsigned int x, unsigned int y, unsigned int z) + { + #if HALF_ERRHANDLING + raise(FE_INVALID, ((x&0x7FFF)>0x7C00 && !(x&0x200)) || ((y&0x7FFF)>0x7C00 && !(y&0x200)) || ((z&0x7FFF)>0x7C00 && !(z&0x200))); + #endif + return ((x&0x7FFF)>0x7C00) ? (x|0x200) : ((y&0x7FFF)>0x7C00) ? (y|0x200) : (z|0x200); + } + + /// Select value or signaling NaN. + /// \param x preferred half-precision value + /// \param y ignored half-precision value except for signaling NaN + /// \return \a y if signaling NaN, \a x otherwise + /// \exception FE_INVALID if \a y is signaling NaN + inline HALF_CONSTEXPR_NOERR unsigned int select(unsigned int x, unsigned int HALF_UNUSED_NOERR(y)) + { + #if HALF_ERRHANDLING + return (((y&0x7FFF)>0x7C00) && !(y&0x200)) ? signal(y) : x; + #else + return x; + #endif + } + + /// Raise domain error and return NaN. + /// return quiet NaN + /// \exception FE_INVALID + inline HALF_CONSTEXPR_NOERR unsigned int invalid() + { + #if HALF_ERRHANDLING + raise(FE_INVALID); + #endif + return 0x7FFF; + } + + /// Raise pole error and return infinity. + /// \param sign half-precision value with sign bit only + /// \return half-precision infinity with sign of \a sign + /// \exception FE_DIVBYZERO + inline HALF_CONSTEXPR_NOERR unsigned int pole(unsigned int sign = 0) + { + #if HALF_ERRHANDLING + raise(FE_DIVBYZERO); + #endif + return sign | 0x7C00; + } + + /// Check value for underflow. + /// \param arg non-zero half-precision value to check + /// \return \a arg + /// \exception FE_UNDERFLOW if arg is subnormal + inline HALF_CONSTEXPR_NOERR unsigned int check_underflow(unsigned int arg) + { + #if HALF_ERRHANDLING && !HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT + raise(FE_UNDERFLOW, !(arg&0x7C00)); + #endif + return arg; + } + + /// \} + /// \name Conversion and rounding + /// \{ + + /// Half-precision overflow. + /// \tparam R rounding mode to use + /// \param sign half-precision value with sign bit only + /// \return rounded overflowing half-precision value + /// \exception FE_OVERFLOW + template HALF_CONSTEXPR_NOERR unsigned int overflow(unsigned int sign = 0) + { + #if HALF_ERRHANDLING + raise(FE_OVERFLOW); + #endif + return (R==std::round_toward_infinity) ? (sign+0x7C00-(sign>>15)) : + (R==std::round_toward_neg_infinity) ? (sign+0x7BFF+(sign>>15)) : + (R==std::round_toward_zero) ? (sign|0x7BFF) : + (sign|0x7C00); + } + + /// Half-precision underflow. + /// \tparam R rounding mode to use + /// \param sign half-precision value with sign bit only + /// \return rounded underflowing half-precision value + /// \exception FE_UNDERFLOW + template HALF_CONSTEXPR_NOERR unsigned int underflow(unsigned int sign = 0) + { + #if HALF_ERRHANDLING + raise(FE_UNDERFLOW); + #endif + return (R==std::round_toward_infinity) ? (sign+1-(sign>>15)) : + (R==std::round_toward_neg_infinity) ? (sign+(sign>>15)) : + sign; + } + + /// Round half-precision number. + /// \tparam R rounding mode to use + /// \tparam I `true` to always raise INEXACT exception, `false` to raise only for rounded results + /// \param value finite half-precision number to round + /// \param g guard bit (most significant discarded bit) + /// \param s sticky bit (or of all but the most significant discarded bits) + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded or \a I is `true` + template HALF_CONSTEXPR_NOERR unsigned int rounded(unsigned int value, int g, int s) + { + #if HALF_ERRHANDLING + value += (R==std::round_to_nearest) ? (g&(s|value)) : + (R==std::round_toward_infinity) ? (~(value>>15)&(g|s)) : + (R==std::round_toward_neg_infinity) ? ((value>>15)&(g|s)) : 0; + if((value&0x7C00) == 0x7C00) + raise(FE_OVERFLOW); + else if(value & 0x7C00) + raise(FE_INEXACT, I || (g|s)!=0); + else + raise(FE_UNDERFLOW, !(HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT) || I || (g|s)!=0); + return value; + #else + return (R==std::round_to_nearest) ? (value+(g&(s|value))) : + (R==std::round_toward_infinity) ? (value+(~(value>>15)&(g|s))) : + (R==std::round_toward_neg_infinity) ? (value+((value>>15)&(g|s))) : + value; + #endif + } + + /// Round half-precision number to nearest integer value. + /// \tparam R rounding mode to use + /// \tparam E `true` for round to even, `false` for round away from zero + /// \tparam I `true` to raise INEXACT exception (if inexact), `false` to never raise it + /// \param value half-precision value to round + /// \return half-precision bits for nearest integral value + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded and \a I is `true` + template unsigned int integral(unsigned int value) + { + unsigned int abs = value & 0x7FFF; + if(abs < 0x3C00) + { + raise(FE_INEXACT, I); + return ((R==std::round_to_nearest) ? (0x3C00&-static_cast(abs>=(0x3800+E))) : + (R==std::round_toward_infinity) ? (0x3C00&-(~(value>>15)&(abs!=0))) : + (R==std::round_toward_neg_infinity) ? (0x3C00&-static_cast(value>0x8000)) : + 0) | (value&0x8000); + } + if(abs >= 0x6400) + return (abs>0x7C00) ? signal(value) : value; + unsigned int exp = 25 - (abs>>10), mask = (1<>exp)&E)) : + (R==std::round_toward_infinity) ? (mask&((value>>15)-1)) : + (R==std::round_toward_neg_infinity) ? (mask&-(value>>15)) : + 0) + value) & ~mask; + } + + /// Convert fixed point to half-precision floating-point. + /// \tparam R rounding mode to use + /// \tparam F number of fractional bits (at least 11) + /// \tparam S `true` for signed, `false` for unsigned + /// \tparam N `true` for additional normalization step, `false` if already normalized to 1.F + /// \tparam I `true` to always raise INEXACT exception, `false` to raise only for rounded results + /// \param m mantissa in Q1.F fixed point format + /// \param exp exponent + /// \param sign half-precision value with sign bit only + /// \param s sticky bit (or of all but the most significant already discarded bits) + /// \return value converted to half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded or \a I is `true` + template unsigned int fixed2half(uint32 m, int exp = 14, unsigned int sign = 0, int s = 0) + { + if(S) + { + uint32 msign = sign_mask(m); + m = (m^msign) - msign; + sign = msign & 0x8000; + } + if(N) + for(; m<(static_cast(1)<(sign+(m>>(F-10-exp)), (m>>(F-11-exp))&1, s|((m&((static_cast(1)<<(F-11-exp))-1))!=0)); + return rounded(sign+(exp<<10)+(m>>(F-10)), (m>>(F-11))&1, s|((m&((static_cast(1)<<(F-11))-1))!=0)); + } + + /// Convert IEEE single-precision to half-precision. + /// Credit for this goes to [Jeroen van der Zijp](ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf). + /// \tparam R rounding mode to use + /// \param value single-precision value to convert + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int float2half_impl(float value, true_type) + { + #if HALF_ENABLE_F16C_INTRINSICS + return _mm_cvtsi128_si32(_mm_cvtps_ph(_mm_set_ss(value), + (R==std::round_to_nearest) ? _MM_FROUND_TO_NEAREST_INT : + (R==std::round_toward_zero) ? _MM_FROUND_TO_ZERO : + (R==std::round_toward_infinity) ? _MM_FROUND_TO_POS_INF : + (R==std::round_toward_neg_infinity) ? _MM_FROUND_TO_NEG_INF : + _MM_FROUND_CUR_DIRECTION)); + #else + bits::type fbits; + std::memcpy(&fbits, &value, sizeof(float)); + #if 1 + unsigned int sign = (fbits>>16) & 0x8000; + fbits &= 0x7FFFFFFF; + if(fbits >= 0x7F800000) + return sign | 0x7C00 | ((fbits>0x7F800000) ? (0x200|((fbits>>13)&0x3FF)) : 0); + if(fbits >= 0x47800000) + return overflow(sign); + if(fbits >= 0x38800000) + return rounded(sign|(((fbits>>23)-112)<<10)|((fbits>>13)&0x3FF), (fbits>>12)&1, (fbits&0xFFF)!=0); + if(fbits >= 0x33000000) + { + int i = 125 - (fbits>>23); + fbits = (fbits&0x7FFFFF) | 0x800000; + return rounded(sign|(fbits>>(i+1)), (fbits>>i)&1, (fbits&((static_cast(1)<(sign); + return sign; + #else + static const uint16 base_table[512] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, + 0x0200, 0x0400, 0x0800, 0x0C00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x2400, 0x2800, 0x2C00, 0x3000, 0x3400, 0x3800, 0x3C00, + 0x4000, 0x4400, 0x4800, 0x4C00, 0x5000, 0x5400, 0x5800, 0x5C00, 0x6000, 0x6400, 0x6800, 0x6C00, 0x7000, 0x7400, 0x7800, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, + 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7BFF, 0x7C00, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8002, 0x8004, 0x8008, 0x8010, 0x8020, 0x8040, 0x8080, 0x8100, + 0x8200, 0x8400, 0x8800, 0x8C00, 0x9000, 0x9400, 0x9800, 0x9C00, 0xA000, 0xA400, 0xA800, 0xAC00, 0xB000, 0xB400, 0xB800, 0xBC00, + 0xC000, 0xC400, 0xC800, 0xCC00, 0xD000, 0xD400, 0xD800, 0xDC00, 0xE000, 0xE400, 0xE800, 0xEC00, 0xF000, 0xF400, 0xF800, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, + 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFBFF, 0xFC00 }; + static const unsigned char shift_table[256] = { + 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 13 }; + int sexp = fbits >> 23, exp = sexp & 0xFF, i = shift_table[exp]; + fbits &= 0x7FFFFF; + uint32 m = (fbits|((exp!=0)<<23)) & -static_cast(exp!=0xFF); + return rounded(base_table[sexp]+(fbits>>i), (m>>(i-1))&1, (((static_cast(1)<<(i-1))-1)&m)!=0); + #endif + #endif + } + + /// Convert IEEE double-precision to half-precision. + /// \tparam R rounding mode to use + /// \param value double-precision value to convert + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int float2half_impl(double value, true_type) + { + #if HALF_ENABLE_F16C_INTRINSICS + if(R == std::round_indeterminate) + return _mm_cvtsi128_si32(_mm_cvtps_ph(_mm_cvtpd_ps(_mm_set_sd(value)), _MM_FROUND_CUR_DIRECTION)); + #endif + bits::type dbits; + std::memcpy(&dbits, &value, sizeof(double)); + uint32 hi = dbits >> 32, lo = dbits & 0xFFFFFFFF; + unsigned int sign = (hi>>16) & 0x8000; + hi &= 0x7FFFFFFF; + if(hi >= 0x7FF00000) + return sign | 0x7C00 | ((dbits&0xFFFFFFFFFFFFF) ? (0x200|((hi>>10)&0x3FF)) : 0); + if(hi >= 0x40F00000) + return overflow(sign); + if(hi >= 0x3F100000) + return rounded(sign|(((hi>>20)-1008)<<10)|((hi>>10)&0x3FF), (hi>>9)&1, ((hi&0x1FF)|lo)!=0); + if(hi >= 0x3E600000) + { + int i = 1018 - (hi>>20); + hi = (hi&0xFFFFF) | 0x100000; + return rounded(sign|(hi>>(i+1)), (hi>>i)&1, ((hi&((static_cast(1)<(sign); + return sign; + } + + /// Convert non-IEEE floating-point to half-precision. + /// \tparam R rounding mode to use + /// \tparam T source type (builtin floating-point type) + /// \param value floating-point value to convert + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int float2half_impl(T value, ...) + { + unsigned int hbits = static_cast(builtin_signbit(value)) << 15; + if(value == T()) + return hbits; + if(builtin_isnan(value)) + return hbits | 0x7FFF; + if(builtin_isinf(value)) + return hbits | 0x7C00; + int exp; + std::frexp(value, &exp); + if(exp > 16) + return overflow(hbits); + if(exp < -13) + value = std::ldexp(value, 25); + else + { + value = std::ldexp(value, 12-exp); + hbits |= ((exp+13)<<10); + } + T ival, frac = std::modf(value, &ival); + int m = std::abs(static_cast(ival)); + return rounded(hbits+(m>>1), m&1, frac!=T()); + } + + /// Convert floating-point to half-precision. + /// \tparam R rounding mode to use + /// \tparam T source type (builtin floating-point type) + /// \param value floating-point value to convert + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int float2half(T value) + { + return float2half_impl(value, bool_type::is_iec559&&sizeof(typename bits::type)==sizeof(T)>()); + } + + /// Convert integer to half-precision floating-point. + /// \tparam R rounding mode to use + /// \tparam T type to convert (builtin integer type) + /// \param value integral value to convert + /// \return rounded half-precision value + /// \exception FE_OVERFLOW on overflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int int2half(T value) + { + unsigned int bits = static_cast(value<0) << 15; + if(!value) + return bits; + if(bits) + value = -value; + if(value > 0xFFFF) + return overflow(bits); + unsigned int m = static_cast(value), exp = 24; + for(; m<0x400; m<<=1,--exp) ; + for(; m>0x7FF; m>>=1,++exp) ; + bits |= (exp<<10) + m; + return (exp>24) ? rounded(bits, (value>>(exp-25))&1, (((1<<(exp-25))-1)&value)!=0) : bits; + } + + /// Convert half-precision to IEEE single-precision. + /// Credit for this goes to [Jeroen van der Zijp](ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf). + /// \param value half-precision value to convert + /// \return single-precision value + inline float half2float_impl(unsigned int value, float, true_type) + { + #if HALF_ENABLE_F16C_INTRINSICS + return _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(value))); + #else + #if 0 + bits::type fbits = static_cast::type>(value&0x8000) << 16; + int abs = value & 0x7FFF; + if(abs) + { + fbits |= 0x38000000 << static_cast(abs>=0x7C00); + for(; abs<0x400; abs<<=1,fbits-=0x800000) ; + fbits += static_cast::type>(abs) << 13; + } + #else + static const bits::type mantissa_table[2048] = { + 0x00000000, 0x33800000, 0x34000000, 0x34400000, 0x34800000, 0x34A00000, 0x34C00000, 0x34E00000, 0x35000000, 0x35100000, 0x35200000, 0x35300000, 0x35400000, 0x35500000, 0x35600000, 0x35700000, + 0x35800000, 0x35880000, 0x35900000, 0x35980000, 0x35A00000, 0x35A80000, 0x35B00000, 0x35B80000, 0x35C00000, 0x35C80000, 0x35D00000, 0x35D80000, 0x35E00000, 0x35E80000, 0x35F00000, 0x35F80000, + 0x36000000, 0x36040000, 0x36080000, 0x360C0000, 0x36100000, 0x36140000, 0x36180000, 0x361C0000, 0x36200000, 0x36240000, 0x36280000, 0x362C0000, 0x36300000, 0x36340000, 0x36380000, 0x363C0000, + 0x36400000, 0x36440000, 0x36480000, 0x364C0000, 0x36500000, 0x36540000, 0x36580000, 0x365C0000, 0x36600000, 0x36640000, 0x36680000, 0x366C0000, 0x36700000, 0x36740000, 0x36780000, 0x367C0000, + 0x36800000, 0x36820000, 0x36840000, 0x36860000, 0x36880000, 0x368A0000, 0x368C0000, 0x368E0000, 0x36900000, 0x36920000, 0x36940000, 0x36960000, 0x36980000, 0x369A0000, 0x369C0000, 0x369E0000, + 0x36A00000, 0x36A20000, 0x36A40000, 0x36A60000, 0x36A80000, 0x36AA0000, 0x36AC0000, 0x36AE0000, 0x36B00000, 0x36B20000, 0x36B40000, 0x36B60000, 0x36B80000, 0x36BA0000, 0x36BC0000, 0x36BE0000, + 0x36C00000, 0x36C20000, 0x36C40000, 0x36C60000, 0x36C80000, 0x36CA0000, 0x36CC0000, 0x36CE0000, 0x36D00000, 0x36D20000, 0x36D40000, 0x36D60000, 0x36D80000, 0x36DA0000, 0x36DC0000, 0x36DE0000, + 0x36E00000, 0x36E20000, 0x36E40000, 0x36E60000, 0x36E80000, 0x36EA0000, 0x36EC0000, 0x36EE0000, 0x36F00000, 0x36F20000, 0x36F40000, 0x36F60000, 0x36F80000, 0x36FA0000, 0x36FC0000, 0x36FE0000, + 0x37000000, 0x37010000, 0x37020000, 0x37030000, 0x37040000, 0x37050000, 0x37060000, 0x37070000, 0x37080000, 0x37090000, 0x370A0000, 0x370B0000, 0x370C0000, 0x370D0000, 0x370E0000, 0x370F0000, + 0x37100000, 0x37110000, 0x37120000, 0x37130000, 0x37140000, 0x37150000, 0x37160000, 0x37170000, 0x37180000, 0x37190000, 0x371A0000, 0x371B0000, 0x371C0000, 0x371D0000, 0x371E0000, 0x371F0000, + 0x37200000, 0x37210000, 0x37220000, 0x37230000, 0x37240000, 0x37250000, 0x37260000, 0x37270000, 0x37280000, 0x37290000, 0x372A0000, 0x372B0000, 0x372C0000, 0x372D0000, 0x372E0000, 0x372F0000, + 0x37300000, 0x37310000, 0x37320000, 0x37330000, 0x37340000, 0x37350000, 0x37360000, 0x37370000, 0x37380000, 0x37390000, 0x373A0000, 0x373B0000, 0x373C0000, 0x373D0000, 0x373E0000, 0x373F0000, + 0x37400000, 0x37410000, 0x37420000, 0x37430000, 0x37440000, 0x37450000, 0x37460000, 0x37470000, 0x37480000, 0x37490000, 0x374A0000, 0x374B0000, 0x374C0000, 0x374D0000, 0x374E0000, 0x374F0000, + 0x37500000, 0x37510000, 0x37520000, 0x37530000, 0x37540000, 0x37550000, 0x37560000, 0x37570000, 0x37580000, 0x37590000, 0x375A0000, 0x375B0000, 0x375C0000, 0x375D0000, 0x375E0000, 0x375F0000, + 0x37600000, 0x37610000, 0x37620000, 0x37630000, 0x37640000, 0x37650000, 0x37660000, 0x37670000, 0x37680000, 0x37690000, 0x376A0000, 0x376B0000, 0x376C0000, 0x376D0000, 0x376E0000, 0x376F0000, + 0x37700000, 0x37710000, 0x37720000, 0x37730000, 0x37740000, 0x37750000, 0x37760000, 0x37770000, 0x37780000, 0x37790000, 0x377A0000, 0x377B0000, 0x377C0000, 0x377D0000, 0x377E0000, 0x377F0000, + 0x37800000, 0x37808000, 0x37810000, 0x37818000, 0x37820000, 0x37828000, 0x37830000, 0x37838000, 0x37840000, 0x37848000, 0x37850000, 0x37858000, 0x37860000, 0x37868000, 0x37870000, 0x37878000, + 0x37880000, 0x37888000, 0x37890000, 0x37898000, 0x378A0000, 0x378A8000, 0x378B0000, 0x378B8000, 0x378C0000, 0x378C8000, 0x378D0000, 0x378D8000, 0x378E0000, 0x378E8000, 0x378F0000, 0x378F8000, + 0x37900000, 0x37908000, 0x37910000, 0x37918000, 0x37920000, 0x37928000, 0x37930000, 0x37938000, 0x37940000, 0x37948000, 0x37950000, 0x37958000, 0x37960000, 0x37968000, 0x37970000, 0x37978000, + 0x37980000, 0x37988000, 0x37990000, 0x37998000, 0x379A0000, 0x379A8000, 0x379B0000, 0x379B8000, 0x379C0000, 0x379C8000, 0x379D0000, 0x379D8000, 0x379E0000, 0x379E8000, 0x379F0000, 0x379F8000, + 0x37A00000, 0x37A08000, 0x37A10000, 0x37A18000, 0x37A20000, 0x37A28000, 0x37A30000, 0x37A38000, 0x37A40000, 0x37A48000, 0x37A50000, 0x37A58000, 0x37A60000, 0x37A68000, 0x37A70000, 0x37A78000, + 0x37A80000, 0x37A88000, 0x37A90000, 0x37A98000, 0x37AA0000, 0x37AA8000, 0x37AB0000, 0x37AB8000, 0x37AC0000, 0x37AC8000, 0x37AD0000, 0x37AD8000, 0x37AE0000, 0x37AE8000, 0x37AF0000, 0x37AF8000, + 0x37B00000, 0x37B08000, 0x37B10000, 0x37B18000, 0x37B20000, 0x37B28000, 0x37B30000, 0x37B38000, 0x37B40000, 0x37B48000, 0x37B50000, 0x37B58000, 0x37B60000, 0x37B68000, 0x37B70000, 0x37B78000, + 0x37B80000, 0x37B88000, 0x37B90000, 0x37B98000, 0x37BA0000, 0x37BA8000, 0x37BB0000, 0x37BB8000, 0x37BC0000, 0x37BC8000, 0x37BD0000, 0x37BD8000, 0x37BE0000, 0x37BE8000, 0x37BF0000, 0x37BF8000, + 0x37C00000, 0x37C08000, 0x37C10000, 0x37C18000, 0x37C20000, 0x37C28000, 0x37C30000, 0x37C38000, 0x37C40000, 0x37C48000, 0x37C50000, 0x37C58000, 0x37C60000, 0x37C68000, 0x37C70000, 0x37C78000, + 0x37C80000, 0x37C88000, 0x37C90000, 0x37C98000, 0x37CA0000, 0x37CA8000, 0x37CB0000, 0x37CB8000, 0x37CC0000, 0x37CC8000, 0x37CD0000, 0x37CD8000, 0x37CE0000, 0x37CE8000, 0x37CF0000, 0x37CF8000, + 0x37D00000, 0x37D08000, 0x37D10000, 0x37D18000, 0x37D20000, 0x37D28000, 0x37D30000, 0x37D38000, 0x37D40000, 0x37D48000, 0x37D50000, 0x37D58000, 0x37D60000, 0x37D68000, 0x37D70000, 0x37D78000, + 0x37D80000, 0x37D88000, 0x37D90000, 0x37D98000, 0x37DA0000, 0x37DA8000, 0x37DB0000, 0x37DB8000, 0x37DC0000, 0x37DC8000, 0x37DD0000, 0x37DD8000, 0x37DE0000, 0x37DE8000, 0x37DF0000, 0x37DF8000, + 0x37E00000, 0x37E08000, 0x37E10000, 0x37E18000, 0x37E20000, 0x37E28000, 0x37E30000, 0x37E38000, 0x37E40000, 0x37E48000, 0x37E50000, 0x37E58000, 0x37E60000, 0x37E68000, 0x37E70000, 0x37E78000, + 0x37E80000, 0x37E88000, 0x37E90000, 0x37E98000, 0x37EA0000, 0x37EA8000, 0x37EB0000, 0x37EB8000, 0x37EC0000, 0x37EC8000, 0x37ED0000, 0x37ED8000, 0x37EE0000, 0x37EE8000, 0x37EF0000, 0x37EF8000, + 0x37F00000, 0x37F08000, 0x37F10000, 0x37F18000, 0x37F20000, 0x37F28000, 0x37F30000, 0x37F38000, 0x37F40000, 0x37F48000, 0x37F50000, 0x37F58000, 0x37F60000, 0x37F68000, 0x37F70000, 0x37F78000, + 0x37F80000, 0x37F88000, 0x37F90000, 0x37F98000, 0x37FA0000, 0x37FA8000, 0x37FB0000, 0x37FB8000, 0x37FC0000, 0x37FC8000, 0x37FD0000, 0x37FD8000, 0x37FE0000, 0x37FE8000, 0x37FF0000, 0x37FF8000, + 0x38000000, 0x38004000, 0x38008000, 0x3800C000, 0x38010000, 0x38014000, 0x38018000, 0x3801C000, 0x38020000, 0x38024000, 0x38028000, 0x3802C000, 0x38030000, 0x38034000, 0x38038000, 0x3803C000, + 0x38040000, 0x38044000, 0x38048000, 0x3804C000, 0x38050000, 0x38054000, 0x38058000, 0x3805C000, 0x38060000, 0x38064000, 0x38068000, 0x3806C000, 0x38070000, 0x38074000, 0x38078000, 0x3807C000, + 0x38080000, 0x38084000, 0x38088000, 0x3808C000, 0x38090000, 0x38094000, 0x38098000, 0x3809C000, 0x380A0000, 0x380A4000, 0x380A8000, 0x380AC000, 0x380B0000, 0x380B4000, 0x380B8000, 0x380BC000, + 0x380C0000, 0x380C4000, 0x380C8000, 0x380CC000, 0x380D0000, 0x380D4000, 0x380D8000, 0x380DC000, 0x380E0000, 0x380E4000, 0x380E8000, 0x380EC000, 0x380F0000, 0x380F4000, 0x380F8000, 0x380FC000, + 0x38100000, 0x38104000, 0x38108000, 0x3810C000, 0x38110000, 0x38114000, 0x38118000, 0x3811C000, 0x38120000, 0x38124000, 0x38128000, 0x3812C000, 0x38130000, 0x38134000, 0x38138000, 0x3813C000, + 0x38140000, 0x38144000, 0x38148000, 0x3814C000, 0x38150000, 0x38154000, 0x38158000, 0x3815C000, 0x38160000, 0x38164000, 0x38168000, 0x3816C000, 0x38170000, 0x38174000, 0x38178000, 0x3817C000, + 0x38180000, 0x38184000, 0x38188000, 0x3818C000, 0x38190000, 0x38194000, 0x38198000, 0x3819C000, 0x381A0000, 0x381A4000, 0x381A8000, 0x381AC000, 0x381B0000, 0x381B4000, 0x381B8000, 0x381BC000, + 0x381C0000, 0x381C4000, 0x381C8000, 0x381CC000, 0x381D0000, 0x381D4000, 0x381D8000, 0x381DC000, 0x381E0000, 0x381E4000, 0x381E8000, 0x381EC000, 0x381F0000, 0x381F4000, 0x381F8000, 0x381FC000, + 0x38200000, 0x38204000, 0x38208000, 0x3820C000, 0x38210000, 0x38214000, 0x38218000, 0x3821C000, 0x38220000, 0x38224000, 0x38228000, 0x3822C000, 0x38230000, 0x38234000, 0x38238000, 0x3823C000, + 0x38240000, 0x38244000, 0x38248000, 0x3824C000, 0x38250000, 0x38254000, 0x38258000, 0x3825C000, 0x38260000, 0x38264000, 0x38268000, 0x3826C000, 0x38270000, 0x38274000, 0x38278000, 0x3827C000, + 0x38280000, 0x38284000, 0x38288000, 0x3828C000, 0x38290000, 0x38294000, 0x38298000, 0x3829C000, 0x382A0000, 0x382A4000, 0x382A8000, 0x382AC000, 0x382B0000, 0x382B4000, 0x382B8000, 0x382BC000, + 0x382C0000, 0x382C4000, 0x382C8000, 0x382CC000, 0x382D0000, 0x382D4000, 0x382D8000, 0x382DC000, 0x382E0000, 0x382E4000, 0x382E8000, 0x382EC000, 0x382F0000, 0x382F4000, 0x382F8000, 0x382FC000, + 0x38300000, 0x38304000, 0x38308000, 0x3830C000, 0x38310000, 0x38314000, 0x38318000, 0x3831C000, 0x38320000, 0x38324000, 0x38328000, 0x3832C000, 0x38330000, 0x38334000, 0x38338000, 0x3833C000, + 0x38340000, 0x38344000, 0x38348000, 0x3834C000, 0x38350000, 0x38354000, 0x38358000, 0x3835C000, 0x38360000, 0x38364000, 0x38368000, 0x3836C000, 0x38370000, 0x38374000, 0x38378000, 0x3837C000, + 0x38380000, 0x38384000, 0x38388000, 0x3838C000, 0x38390000, 0x38394000, 0x38398000, 0x3839C000, 0x383A0000, 0x383A4000, 0x383A8000, 0x383AC000, 0x383B0000, 0x383B4000, 0x383B8000, 0x383BC000, + 0x383C0000, 0x383C4000, 0x383C8000, 0x383CC000, 0x383D0000, 0x383D4000, 0x383D8000, 0x383DC000, 0x383E0000, 0x383E4000, 0x383E8000, 0x383EC000, 0x383F0000, 0x383F4000, 0x383F8000, 0x383FC000, + 0x38400000, 0x38404000, 0x38408000, 0x3840C000, 0x38410000, 0x38414000, 0x38418000, 0x3841C000, 0x38420000, 0x38424000, 0x38428000, 0x3842C000, 0x38430000, 0x38434000, 0x38438000, 0x3843C000, + 0x38440000, 0x38444000, 0x38448000, 0x3844C000, 0x38450000, 0x38454000, 0x38458000, 0x3845C000, 0x38460000, 0x38464000, 0x38468000, 0x3846C000, 0x38470000, 0x38474000, 0x38478000, 0x3847C000, + 0x38480000, 0x38484000, 0x38488000, 0x3848C000, 0x38490000, 0x38494000, 0x38498000, 0x3849C000, 0x384A0000, 0x384A4000, 0x384A8000, 0x384AC000, 0x384B0000, 0x384B4000, 0x384B8000, 0x384BC000, + 0x384C0000, 0x384C4000, 0x384C8000, 0x384CC000, 0x384D0000, 0x384D4000, 0x384D8000, 0x384DC000, 0x384E0000, 0x384E4000, 0x384E8000, 0x384EC000, 0x384F0000, 0x384F4000, 0x384F8000, 0x384FC000, + 0x38500000, 0x38504000, 0x38508000, 0x3850C000, 0x38510000, 0x38514000, 0x38518000, 0x3851C000, 0x38520000, 0x38524000, 0x38528000, 0x3852C000, 0x38530000, 0x38534000, 0x38538000, 0x3853C000, + 0x38540000, 0x38544000, 0x38548000, 0x3854C000, 0x38550000, 0x38554000, 0x38558000, 0x3855C000, 0x38560000, 0x38564000, 0x38568000, 0x3856C000, 0x38570000, 0x38574000, 0x38578000, 0x3857C000, + 0x38580000, 0x38584000, 0x38588000, 0x3858C000, 0x38590000, 0x38594000, 0x38598000, 0x3859C000, 0x385A0000, 0x385A4000, 0x385A8000, 0x385AC000, 0x385B0000, 0x385B4000, 0x385B8000, 0x385BC000, + 0x385C0000, 0x385C4000, 0x385C8000, 0x385CC000, 0x385D0000, 0x385D4000, 0x385D8000, 0x385DC000, 0x385E0000, 0x385E4000, 0x385E8000, 0x385EC000, 0x385F0000, 0x385F4000, 0x385F8000, 0x385FC000, + 0x38600000, 0x38604000, 0x38608000, 0x3860C000, 0x38610000, 0x38614000, 0x38618000, 0x3861C000, 0x38620000, 0x38624000, 0x38628000, 0x3862C000, 0x38630000, 0x38634000, 0x38638000, 0x3863C000, + 0x38640000, 0x38644000, 0x38648000, 0x3864C000, 0x38650000, 0x38654000, 0x38658000, 0x3865C000, 0x38660000, 0x38664000, 0x38668000, 0x3866C000, 0x38670000, 0x38674000, 0x38678000, 0x3867C000, + 0x38680000, 0x38684000, 0x38688000, 0x3868C000, 0x38690000, 0x38694000, 0x38698000, 0x3869C000, 0x386A0000, 0x386A4000, 0x386A8000, 0x386AC000, 0x386B0000, 0x386B4000, 0x386B8000, 0x386BC000, + 0x386C0000, 0x386C4000, 0x386C8000, 0x386CC000, 0x386D0000, 0x386D4000, 0x386D8000, 0x386DC000, 0x386E0000, 0x386E4000, 0x386E8000, 0x386EC000, 0x386F0000, 0x386F4000, 0x386F8000, 0x386FC000, + 0x38700000, 0x38704000, 0x38708000, 0x3870C000, 0x38710000, 0x38714000, 0x38718000, 0x3871C000, 0x38720000, 0x38724000, 0x38728000, 0x3872C000, 0x38730000, 0x38734000, 0x38738000, 0x3873C000, + 0x38740000, 0x38744000, 0x38748000, 0x3874C000, 0x38750000, 0x38754000, 0x38758000, 0x3875C000, 0x38760000, 0x38764000, 0x38768000, 0x3876C000, 0x38770000, 0x38774000, 0x38778000, 0x3877C000, + 0x38780000, 0x38784000, 0x38788000, 0x3878C000, 0x38790000, 0x38794000, 0x38798000, 0x3879C000, 0x387A0000, 0x387A4000, 0x387A8000, 0x387AC000, 0x387B0000, 0x387B4000, 0x387B8000, 0x387BC000, + 0x387C0000, 0x387C4000, 0x387C8000, 0x387CC000, 0x387D0000, 0x387D4000, 0x387D8000, 0x387DC000, 0x387E0000, 0x387E4000, 0x387E8000, 0x387EC000, 0x387F0000, 0x387F4000, 0x387F8000, 0x387FC000, + 0x38000000, 0x38002000, 0x38004000, 0x38006000, 0x38008000, 0x3800A000, 0x3800C000, 0x3800E000, 0x38010000, 0x38012000, 0x38014000, 0x38016000, 0x38018000, 0x3801A000, 0x3801C000, 0x3801E000, + 0x38020000, 0x38022000, 0x38024000, 0x38026000, 0x38028000, 0x3802A000, 0x3802C000, 0x3802E000, 0x38030000, 0x38032000, 0x38034000, 0x38036000, 0x38038000, 0x3803A000, 0x3803C000, 0x3803E000, + 0x38040000, 0x38042000, 0x38044000, 0x38046000, 0x38048000, 0x3804A000, 0x3804C000, 0x3804E000, 0x38050000, 0x38052000, 0x38054000, 0x38056000, 0x38058000, 0x3805A000, 0x3805C000, 0x3805E000, + 0x38060000, 0x38062000, 0x38064000, 0x38066000, 0x38068000, 0x3806A000, 0x3806C000, 0x3806E000, 0x38070000, 0x38072000, 0x38074000, 0x38076000, 0x38078000, 0x3807A000, 0x3807C000, 0x3807E000, + 0x38080000, 0x38082000, 0x38084000, 0x38086000, 0x38088000, 0x3808A000, 0x3808C000, 0x3808E000, 0x38090000, 0x38092000, 0x38094000, 0x38096000, 0x38098000, 0x3809A000, 0x3809C000, 0x3809E000, + 0x380A0000, 0x380A2000, 0x380A4000, 0x380A6000, 0x380A8000, 0x380AA000, 0x380AC000, 0x380AE000, 0x380B0000, 0x380B2000, 0x380B4000, 0x380B6000, 0x380B8000, 0x380BA000, 0x380BC000, 0x380BE000, + 0x380C0000, 0x380C2000, 0x380C4000, 0x380C6000, 0x380C8000, 0x380CA000, 0x380CC000, 0x380CE000, 0x380D0000, 0x380D2000, 0x380D4000, 0x380D6000, 0x380D8000, 0x380DA000, 0x380DC000, 0x380DE000, + 0x380E0000, 0x380E2000, 0x380E4000, 0x380E6000, 0x380E8000, 0x380EA000, 0x380EC000, 0x380EE000, 0x380F0000, 0x380F2000, 0x380F4000, 0x380F6000, 0x380F8000, 0x380FA000, 0x380FC000, 0x380FE000, + 0x38100000, 0x38102000, 0x38104000, 0x38106000, 0x38108000, 0x3810A000, 0x3810C000, 0x3810E000, 0x38110000, 0x38112000, 0x38114000, 0x38116000, 0x38118000, 0x3811A000, 0x3811C000, 0x3811E000, + 0x38120000, 0x38122000, 0x38124000, 0x38126000, 0x38128000, 0x3812A000, 0x3812C000, 0x3812E000, 0x38130000, 0x38132000, 0x38134000, 0x38136000, 0x38138000, 0x3813A000, 0x3813C000, 0x3813E000, + 0x38140000, 0x38142000, 0x38144000, 0x38146000, 0x38148000, 0x3814A000, 0x3814C000, 0x3814E000, 0x38150000, 0x38152000, 0x38154000, 0x38156000, 0x38158000, 0x3815A000, 0x3815C000, 0x3815E000, + 0x38160000, 0x38162000, 0x38164000, 0x38166000, 0x38168000, 0x3816A000, 0x3816C000, 0x3816E000, 0x38170000, 0x38172000, 0x38174000, 0x38176000, 0x38178000, 0x3817A000, 0x3817C000, 0x3817E000, + 0x38180000, 0x38182000, 0x38184000, 0x38186000, 0x38188000, 0x3818A000, 0x3818C000, 0x3818E000, 0x38190000, 0x38192000, 0x38194000, 0x38196000, 0x38198000, 0x3819A000, 0x3819C000, 0x3819E000, + 0x381A0000, 0x381A2000, 0x381A4000, 0x381A6000, 0x381A8000, 0x381AA000, 0x381AC000, 0x381AE000, 0x381B0000, 0x381B2000, 0x381B4000, 0x381B6000, 0x381B8000, 0x381BA000, 0x381BC000, 0x381BE000, + 0x381C0000, 0x381C2000, 0x381C4000, 0x381C6000, 0x381C8000, 0x381CA000, 0x381CC000, 0x381CE000, 0x381D0000, 0x381D2000, 0x381D4000, 0x381D6000, 0x381D8000, 0x381DA000, 0x381DC000, 0x381DE000, + 0x381E0000, 0x381E2000, 0x381E4000, 0x381E6000, 0x381E8000, 0x381EA000, 0x381EC000, 0x381EE000, 0x381F0000, 0x381F2000, 0x381F4000, 0x381F6000, 0x381F8000, 0x381FA000, 0x381FC000, 0x381FE000, + 0x38200000, 0x38202000, 0x38204000, 0x38206000, 0x38208000, 0x3820A000, 0x3820C000, 0x3820E000, 0x38210000, 0x38212000, 0x38214000, 0x38216000, 0x38218000, 0x3821A000, 0x3821C000, 0x3821E000, + 0x38220000, 0x38222000, 0x38224000, 0x38226000, 0x38228000, 0x3822A000, 0x3822C000, 0x3822E000, 0x38230000, 0x38232000, 0x38234000, 0x38236000, 0x38238000, 0x3823A000, 0x3823C000, 0x3823E000, + 0x38240000, 0x38242000, 0x38244000, 0x38246000, 0x38248000, 0x3824A000, 0x3824C000, 0x3824E000, 0x38250000, 0x38252000, 0x38254000, 0x38256000, 0x38258000, 0x3825A000, 0x3825C000, 0x3825E000, + 0x38260000, 0x38262000, 0x38264000, 0x38266000, 0x38268000, 0x3826A000, 0x3826C000, 0x3826E000, 0x38270000, 0x38272000, 0x38274000, 0x38276000, 0x38278000, 0x3827A000, 0x3827C000, 0x3827E000, + 0x38280000, 0x38282000, 0x38284000, 0x38286000, 0x38288000, 0x3828A000, 0x3828C000, 0x3828E000, 0x38290000, 0x38292000, 0x38294000, 0x38296000, 0x38298000, 0x3829A000, 0x3829C000, 0x3829E000, + 0x382A0000, 0x382A2000, 0x382A4000, 0x382A6000, 0x382A8000, 0x382AA000, 0x382AC000, 0x382AE000, 0x382B0000, 0x382B2000, 0x382B4000, 0x382B6000, 0x382B8000, 0x382BA000, 0x382BC000, 0x382BE000, + 0x382C0000, 0x382C2000, 0x382C4000, 0x382C6000, 0x382C8000, 0x382CA000, 0x382CC000, 0x382CE000, 0x382D0000, 0x382D2000, 0x382D4000, 0x382D6000, 0x382D8000, 0x382DA000, 0x382DC000, 0x382DE000, + 0x382E0000, 0x382E2000, 0x382E4000, 0x382E6000, 0x382E8000, 0x382EA000, 0x382EC000, 0x382EE000, 0x382F0000, 0x382F2000, 0x382F4000, 0x382F6000, 0x382F8000, 0x382FA000, 0x382FC000, 0x382FE000, + 0x38300000, 0x38302000, 0x38304000, 0x38306000, 0x38308000, 0x3830A000, 0x3830C000, 0x3830E000, 0x38310000, 0x38312000, 0x38314000, 0x38316000, 0x38318000, 0x3831A000, 0x3831C000, 0x3831E000, + 0x38320000, 0x38322000, 0x38324000, 0x38326000, 0x38328000, 0x3832A000, 0x3832C000, 0x3832E000, 0x38330000, 0x38332000, 0x38334000, 0x38336000, 0x38338000, 0x3833A000, 0x3833C000, 0x3833E000, + 0x38340000, 0x38342000, 0x38344000, 0x38346000, 0x38348000, 0x3834A000, 0x3834C000, 0x3834E000, 0x38350000, 0x38352000, 0x38354000, 0x38356000, 0x38358000, 0x3835A000, 0x3835C000, 0x3835E000, + 0x38360000, 0x38362000, 0x38364000, 0x38366000, 0x38368000, 0x3836A000, 0x3836C000, 0x3836E000, 0x38370000, 0x38372000, 0x38374000, 0x38376000, 0x38378000, 0x3837A000, 0x3837C000, 0x3837E000, + 0x38380000, 0x38382000, 0x38384000, 0x38386000, 0x38388000, 0x3838A000, 0x3838C000, 0x3838E000, 0x38390000, 0x38392000, 0x38394000, 0x38396000, 0x38398000, 0x3839A000, 0x3839C000, 0x3839E000, + 0x383A0000, 0x383A2000, 0x383A4000, 0x383A6000, 0x383A8000, 0x383AA000, 0x383AC000, 0x383AE000, 0x383B0000, 0x383B2000, 0x383B4000, 0x383B6000, 0x383B8000, 0x383BA000, 0x383BC000, 0x383BE000, + 0x383C0000, 0x383C2000, 0x383C4000, 0x383C6000, 0x383C8000, 0x383CA000, 0x383CC000, 0x383CE000, 0x383D0000, 0x383D2000, 0x383D4000, 0x383D6000, 0x383D8000, 0x383DA000, 0x383DC000, 0x383DE000, + 0x383E0000, 0x383E2000, 0x383E4000, 0x383E6000, 0x383E8000, 0x383EA000, 0x383EC000, 0x383EE000, 0x383F0000, 0x383F2000, 0x383F4000, 0x383F6000, 0x383F8000, 0x383FA000, 0x383FC000, 0x383FE000, + 0x38400000, 0x38402000, 0x38404000, 0x38406000, 0x38408000, 0x3840A000, 0x3840C000, 0x3840E000, 0x38410000, 0x38412000, 0x38414000, 0x38416000, 0x38418000, 0x3841A000, 0x3841C000, 0x3841E000, + 0x38420000, 0x38422000, 0x38424000, 0x38426000, 0x38428000, 0x3842A000, 0x3842C000, 0x3842E000, 0x38430000, 0x38432000, 0x38434000, 0x38436000, 0x38438000, 0x3843A000, 0x3843C000, 0x3843E000, + 0x38440000, 0x38442000, 0x38444000, 0x38446000, 0x38448000, 0x3844A000, 0x3844C000, 0x3844E000, 0x38450000, 0x38452000, 0x38454000, 0x38456000, 0x38458000, 0x3845A000, 0x3845C000, 0x3845E000, + 0x38460000, 0x38462000, 0x38464000, 0x38466000, 0x38468000, 0x3846A000, 0x3846C000, 0x3846E000, 0x38470000, 0x38472000, 0x38474000, 0x38476000, 0x38478000, 0x3847A000, 0x3847C000, 0x3847E000, + 0x38480000, 0x38482000, 0x38484000, 0x38486000, 0x38488000, 0x3848A000, 0x3848C000, 0x3848E000, 0x38490000, 0x38492000, 0x38494000, 0x38496000, 0x38498000, 0x3849A000, 0x3849C000, 0x3849E000, + 0x384A0000, 0x384A2000, 0x384A4000, 0x384A6000, 0x384A8000, 0x384AA000, 0x384AC000, 0x384AE000, 0x384B0000, 0x384B2000, 0x384B4000, 0x384B6000, 0x384B8000, 0x384BA000, 0x384BC000, 0x384BE000, + 0x384C0000, 0x384C2000, 0x384C4000, 0x384C6000, 0x384C8000, 0x384CA000, 0x384CC000, 0x384CE000, 0x384D0000, 0x384D2000, 0x384D4000, 0x384D6000, 0x384D8000, 0x384DA000, 0x384DC000, 0x384DE000, + 0x384E0000, 0x384E2000, 0x384E4000, 0x384E6000, 0x384E8000, 0x384EA000, 0x384EC000, 0x384EE000, 0x384F0000, 0x384F2000, 0x384F4000, 0x384F6000, 0x384F8000, 0x384FA000, 0x384FC000, 0x384FE000, + 0x38500000, 0x38502000, 0x38504000, 0x38506000, 0x38508000, 0x3850A000, 0x3850C000, 0x3850E000, 0x38510000, 0x38512000, 0x38514000, 0x38516000, 0x38518000, 0x3851A000, 0x3851C000, 0x3851E000, + 0x38520000, 0x38522000, 0x38524000, 0x38526000, 0x38528000, 0x3852A000, 0x3852C000, 0x3852E000, 0x38530000, 0x38532000, 0x38534000, 0x38536000, 0x38538000, 0x3853A000, 0x3853C000, 0x3853E000, + 0x38540000, 0x38542000, 0x38544000, 0x38546000, 0x38548000, 0x3854A000, 0x3854C000, 0x3854E000, 0x38550000, 0x38552000, 0x38554000, 0x38556000, 0x38558000, 0x3855A000, 0x3855C000, 0x3855E000, + 0x38560000, 0x38562000, 0x38564000, 0x38566000, 0x38568000, 0x3856A000, 0x3856C000, 0x3856E000, 0x38570000, 0x38572000, 0x38574000, 0x38576000, 0x38578000, 0x3857A000, 0x3857C000, 0x3857E000, + 0x38580000, 0x38582000, 0x38584000, 0x38586000, 0x38588000, 0x3858A000, 0x3858C000, 0x3858E000, 0x38590000, 0x38592000, 0x38594000, 0x38596000, 0x38598000, 0x3859A000, 0x3859C000, 0x3859E000, + 0x385A0000, 0x385A2000, 0x385A4000, 0x385A6000, 0x385A8000, 0x385AA000, 0x385AC000, 0x385AE000, 0x385B0000, 0x385B2000, 0x385B4000, 0x385B6000, 0x385B8000, 0x385BA000, 0x385BC000, 0x385BE000, + 0x385C0000, 0x385C2000, 0x385C4000, 0x385C6000, 0x385C8000, 0x385CA000, 0x385CC000, 0x385CE000, 0x385D0000, 0x385D2000, 0x385D4000, 0x385D6000, 0x385D8000, 0x385DA000, 0x385DC000, 0x385DE000, + 0x385E0000, 0x385E2000, 0x385E4000, 0x385E6000, 0x385E8000, 0x385EA000, 0x385EC000, 0x385EE000, 0x385F0000, 0x385F2000, 0x385F4000, 0x385F6000, 0x385F8000, 0x385FA000, 0x385FC000, 0x385FE000, + 0x38600000, 0x38602000, 0x38604000, 0x38606000, 0x38608000, 0x3860A000, 0x3860C000, 0x3860E000, 0x38610000, 0x38612000, 0x38614000, 0x38616000, 0x38618000, 0x3861A000, 0x3861C000, 0x3861E000, + 0x38620000, 0x38622000, 0x38624000, 0x38626000, 0x38628000, 0x3862A000, 0x3862C000, 0x3862E000, 0x38630000, 0x38632000, 0x38634000, 0x38636000, 0x38638000, 0x3863A000, 0x3863C000, 0x3863E000, + 0x38640000, 0x38642000, 0x38644000, 0x38646000, 0x38648000, 0x3864A000, 0x3864C000, 0x3864E000, 0x38650000, 0x38652000, 0x38654000, 0x38656000, 0x38658000, 0x3865A000, 0x3865C000, 0x3865E000, + 0x38660000, 0x38662000, 0x38664000, 0x38666000, 0x38668000, 0x3866A000, 0x3866C000, 0x3866E000, 0x38670000, 0x38672000, 0x38674000, 0x38676000, 0x38678000, 0x3867A000, 0x3867C000, 0x3867E000, + 0x38680000, 0x38682000, 0x38684000, 0x38686000, 0x38688000, 0x3868A000, 0x3868C000, 0x3868E000, 0x38690000, 0x38692000, 0x38694000, 0x38696000, 0x38698000, 0x3869A000, 0x3869C000, 0x3869E000, + 0x386A0000, 0x386A2000, 0x386A4000, 0x386A6000, 0x386A8000, 0x386AA000, 0x386AC000, 0x386AE000, 0x386B0000, 0x386B2000, 0x386B4000, 0x386B6000, 0x386B8000, 0x386BA000, 0x386BC000, 0x386BE000, + 0x386C0000, 0x386C2000, 0x386C4000, 0x386C6000, 0x386C8000, 0x386CA000, 0x386CC000, 0x386CE000, 0x386D0000, 0x386D2000, 0x386D4000, 0x386D6000, 0x386D8000, 0x386DA000, 0x386DC000, 0x386DE000, + 0x386E0000, 0x386E2000, 0x386E4000, 0x386E6000, 0x386E8000, 0x386EA000, 0x386EC000, 0x386EE000, 0x386F0000, 0x386F2000, 0x386F4000, 0x386F6000, 0x386F8000, 0x386FA000, 0x386FC000, 0x386FE000, + 0x38700000, 0x38702000, 0x38704000, 0x38706000, 0x38708000, 0x3870A000, 0x3870C000, 0x3870E000, 0x38710000, 0x38712000, 0x38714000, 0x38716000, 0x38718000, 0x3871A000, 0x3871C000, 0x3871E000, + 0x38720000, 0x38722000, 0x38724000, 0x38726000, 0x38728000, 0x3872A000, 0x3872C000, 0x3872E000, 0x38730000, 0x38732000, 0x38734000, 0x38736000, 0x38738000, 0x3873A000, 0x3873C000, 0x3873E000, + 0x38740000, 0x38742000, 0x38744000, 0x38746000, 0x38748000, 0x3874A000, 0x3874C000, 0x3874E000, 0x38750000, 0x38752000, 0x38754000, 0x38756000, 0x38758000, 0x3875A000, 0x3875C000, 0x3875E000, + 0x38760000, 0x38762000, 0x38764000, 0x38766000, 0x38768000, 0x3876A000, 0x3876C000, 0x3876E000, 0x38770000, 0x38772000, 0x38774000, 0x38776000, 0x38778000, 0x3877A000, 0x3877C000, 0x3877E000, + 0x38780000, 0x38782000, 0x38784000, 0x38786000, 0x38788000, 0x3878A000, 0x3878C000, 0x3878E000, 0x38790000, 0x38792000, 0x38794000, 0x38796000, 0x38798000, 0x3879A000, 0x3879C000, 0x3879E000, + 0x387A0000, 0x387A2000, 0x387A4000, 0x387A6000, 0x387A8000, 0x387AA000, 0x387AC000, 0x387AE000, 0x387B0000, 0x387B2000, 0x387B4000, 0x387B6000, 0x387B8000, 0x387BA000, 0x387BC000, 0x387BE000, + 0x387C0000, 0x387C2000, 0x387C4000, 0x387C6000, 0x387C8000, 0x387CA000, 0x387CC000, 0x387CE000, 0x387D0000, 0x387D2000, 0x387D4000, 0x387D6000, 0x387D8000, 0x387DA000, 0x387DC000, 0x387DE000, + 0x387E0000, 0x387E2000, 0x387E4000, 0x387E6000, 0x387E8000, 0x387EA000, 0x387EC000, 0x387EE000, 0x387F0000, 0x387F2000, 0x387F4000, 0x387F6000, 0x387F8000, 0x387FA000, 0x387FC000, 0x387FE000 }; + static const bits::type exponent_table[64] = { + 0x00000000, 0x00800000, 0x01000000, 0x01800000, 0x02000000, 0x02800000, 0x03000000, 0x03800000, 0x04000000, 0x04800000, 0x05000000, 0x05800000, 0x06000000, 0x06800000, 0x07000000, 0x07800000, + 0x08000000, 0x08800000, 0x09000000, 0x09800000, 0x0A000000, 0x0A800000, 0x0B000000, 0x0B800000, 0x0C000000, 0x0C800000, 0x0D000000, 0x0D800000, 0x0E000000, 0x0E800000, 0x0F000000, 0x47800000, + 0x80000000, 0x80800000, 0x81000000, 0x81800000, 0x82000000, 0x82800000, 0x83000000, 0x83800000, 0x84000000, 0x84800000, 0x85000000, 0x85800000, 0x86000000, 0x86800000, 0x87000000, 0x87800000, + 0x88000000, 0x88800000, 0x89000000, 0x89800000, 0x8A000000, 0x8A800000, 0x8B000000, 0x8B800000, 0x8C000000, 0x8C800000, 0x8D000000, 0x8D800000, 0x8E000000, 0x8E800000, 0x8F000000, 0xC7800000 }; + static const unsigned short offset_table[64] = { + 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, + 0, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024 }; + bits::type fbits = mantissa_table[offset_table[value>>10]+(value&0x3FF)] + exponent_table[value>>10]; + #endif + float out; + std::memcpy(&out, &fbits, sizeof(float)); + return out; + #endif + } + + /// Convert half-precision to IEEE double-precision. + /// \param value half-precision value to convert + /// \return double-precision value + inline double half2float_impl(unsigned int value, double, true_type) + { + #if HALF_ENABLE_F16C_INTRINSICS + return _mm_cvtsd_f64(_mm_cvtps_pd(_mm_cvtph_ps(_mm_cvtsi32_si128(value)))); + #else + uint32 hi = static_cast(value&0x8000) << 16; + unsigned int abs = value & 0x7FFF; + if(abs) + { + hi |= 0x3F000000 << static_cast(abs>=0x7C00); + for(; abs<0x400; abs<<=1,hi-=0x100000) ; + hi += static_cast(abs) << 10; + } + bits::type dbits = static_cast::type>(hi) << 32; + double out; + std::memcpy(&out, &dbits, sizeof(double)); + return out; + #endif + } + + /// Convert half-precision to non-IEEE floating-point. + /// \tparam T type to convert to (builtin integer type) + /// \param value half-precision value to convert + /// \return floating-point value + template T half2float_impl(unsigned int value, T, ...) + { + T out; + unsigned int abs = value & 0x7FFF; + if(abs > 0x7C00) + out = (std::numeric_limits::has_signaling_NaN && !(abs&0x200)) ? std::numeric_limits::signaling_NaN() : + std::numeric_limits::has_quiet_NaN ? std::numeric_limits::quiet_NaN() : T(); + else if(abs == 0x7C00) + out = std::numeric_limits::has_infinity ? std::numeric_limits::infinity() : std::numeric_limits::max(); + else if(abs > 0x3FF) + out = std::ldexp(static_cast((abs&0x3FF)|0x400), (abs>>10)-25); + else + out = std::ldexp(static_cast(abs), -24); + return (value&0x8000) ? -out : out; + } + + /// Convert half-precision to floating-point. + /// \tparam T type to convert to (builtin integer type) + /// \param value half-precision value to convert + /// \return floating-point value + template T half2float(unsigned int value) + { + return half2float_impl(value, T(), bool_type::is_iec559&&sizeof(typename bits::type)==sizeof(T)>()); + } + + /// Convert half-precision floating-point to integer. + /// \tparam R rounding mode to use + /// \tparam E `true` for round to even, `false` for round away from zero + /// \tparam I `true` to raise INEXACT exception (if inexact), `false` to never raise it + /// \tparam T type to convert to (buitlin integer type with at least 16 bits precision, excluding any implicit sign bits) + /// \param value half-precision value to convert + /// \return rounded integer value + /// \exception FE_INVALID if value is not representable in type \a T + /// \exception FE_INEXACT if value had to be rounded and \a I is `true` + template T half2int(unsigned int value) + { + unsigned int abs = value & 0x7FFF; + if(abs >= 0x7C00) + { + raise(FE_INVALID); + return (value&0x8000) ? std::numeric_limits::min() : std::numeric_limits::max(); + } + if(abs < 0x3800) + { + raise(FE_INEXACT, I); + return (R==std::round_toward_infinity) ? T(~(value>>15)&(abs!=0)) : + (R==std::round_toward_neg_infinity) ? -T(value>0x8000) : + T(); + } + int exp = 25 - (abs>>10); + unsigned int m = (value&0x3FF) | 0x400; + int32 i = static_cast((exp<=0) ? (m<<-exp) : ((m+( + (R==std::round_to_nearest) ? ((1<<(exp-1))-(~(m>>exp)&E)) : + (R==std::round_toward_infinity) ? (((1<>15)-1)) : + (R==std::round_toward_neg_infinity) ? (((1<>15)) : 0))>>exp)); + if((!std::numeric_limits::is_signed && (value&0x8000)) || (std::numeric_limits::digits<16 && + ((value&0x8000) ? (-i::min()) : (i>std::numeric_limits::max())))) + raise(FE_INVALID); + else if(I && exp > 0 && (m&((1<((value&0x8000) ? -i : i); + } + + /// \} + /// \name Mathematics + /// \{ + + /// upper part of 64-bit multiplication. + /// \tparam R rounding mode to use + /// \param x first factor + /// \param y second factor + /// \return upper 32 bit of \a x * \a y + template uint32 mulhi(uint32 x, uint32 y) + { + uint32 xy = (x>>16) * (y&0xFFFF), yx = (x&0xFFFF) * (y>>16), c = (xy&0xFFFF) + (yx&0xFFFF) + (((x&0xFFFF)*(y&0xFFFF))>>16); + return (x>>16)*(y>>16) + (xy>>16) + (yx>>16) + (c>>16) + + ((R==std::round_to_nearest) ? ((c>>15)&1) : (R==std::round_toward_infinity) ? ((c&0xFFFF)!=0) : 0); + } + + /// 64-bit multiplication. + /// \param x first factor + /// \param y second factor + /// \return upper 32 bit of \a x * \a y rounded to nearest + inline uint32 multiply64(uint32 x, uint32 y) + { + #if HALF_ENABLE_CPP11_LONG_LONG + return static_cast((static_cast(x)*static_cast(y)+0x80000000)>>32); + #else + return mulhi(x, y); + #endif + } + + /// 64-bit division. + /// \param x upper 32 bit of dividend + /// \param y divisor + /// \param s variable to store sticky bit for rounding + /// \return (\a x << 32) / \a y + inline uint32 divide64(uint32 x, uint32 y, int &s) + { + #if HALF_ENABLE_CPP11_LONG_LONG + unsigned long long xx = static_cast(x) << 32; + return s = (xx%y!=0), static_cast(xx/y); + #else + y >>= 1; + uint32 rem = x, div = 0; + for(unsigned int i=0; i<32; ++i) + { + div <<= 1; + if(rem >= y) + { + rem -= y; + div |= 1; + } + rem <<= 1; + } + return s = rem > 1, div; + #endif + } + + /// Half precision positive modulus. + /// \tparam Q `true` to compute full quotient, `false` else + /// \tparam R `true` to compute signed remainder, `false` for positive remainder + /// \param x first operand as positive finite half-precision value + /// \param y second operand as positive finite half-precision value + /// \param quo adress to store quotient at, `nullptr` if \a Q `false` + /// \return modulus of \a x / \a y + template unsigned int mod(unsigned int x, unsigned int y, int *quo = NULL) + { + unsigned int q = 0; + if(x > y) + { + int absx = x, absy = y, expx = 0, expy = 0; + for(; absx<0x400; absx<<=1,--expx) ; + for(; absy<0x400; absy<<=1,--expy) ; + expx += absx >> 10; + expy += absy >> 10; + int mx = (absx&0x3FF) | 0x400, my = (absy&0x3FF) | 0x400; + for(int d=expx-expy; d; --d) + { + if(!Q && mx == my) + return 0; + if(mx >= my) + { + mx -= my; + q += Q; + } + mx <<= 1; + q <<= static_cast(Q); + } + if(!Q && mx == my) + return 0; + if(mx >= my) + { + mx -= my; + ++q; + } + if(Q) + { + q &= (1<<(std::numeric_limits::digits-1)) - 1; + if(!mx) + return *quo = q, 0; + } + for(; mx<0x400; mx<<=1,--expy) ; + x = (expy>0) ? ((expy<<10)|(mx&0x3FF)) : (mx>>(1-expy)); + } + if(R) + { + unsigned int a, b; + if(y < 0x800) + { + a = (x<0x400) ? (x<<1) : (x+0x400); + b = y; + } + else + { + a = x; + b = y - 0x400; + } + if(a > b || (a == b && (q&1))) + { + int exp = (y>>10) + (y<=0x3FF), d = exp - (x>>10) - (x<=0x3FF); + int m = (((y&0x3FF)|((y>0x3FF)<<10))<<1) - (((x&0x3FF)|((x>0x3FF)<<10))<<(1-d)); + for(; m<0x800 && exp>1; m<<=1,--exp) ; + x = 0x8000 + ((exp-1)<<10) + (m>>1); + q += Q; + } + } + if(Q) + *quo = q; + return x; + } + + /// Fixed point square root. + /// \tparam F number of fractional bits + /// \param r radicand in Q1.F fixed point format + /// \param exp exponent + /// \return square root as Q1.F/2 + template uint32 sqrt(uint32 &r, int &exp) + { + int i = exp & 1; + r <<= i; + exp = (exp-i) / 2; + uint32 m = 0; + for(uint32 bit=static_cast(1)<>=2) + { + if(r < m+bit) + m >>= 1; + else + { + r -= m + bit; + m = (m>>1) + bit; + } + } + return m; + } + + /// Fixed point binary exponential. + /// This uses the BKM algorithm in E-mode. + /// \param m exponent in [0,1) as Q0.31 + /// \param n number of iterations (at most 32) + /// \return 2 ^ \a m as Q1.31 + inline uint32 exp2(uint32 m, unsigned int n = 32) + { + static const uint32 logs[] = { + 0x80000000, 0x4AE00D1D, 0x2934F098, 0x15C01A3A, 0x0B31FB7D, 0x05AEB4DD, 0x02DCF2D1, 0x016FE50B, + 0x00B84E23, 0x005C3E10, 0x002E24CA, 0x001713D6, 0x000B8A47, 0x0005C53B, 0x0002E2A3, 0x00017153, + 0x0000B8AA, 0x00005C55, 0x00002E2B, 0x00001715, 0x00000B8B, 0x000005C5, 0x000002E3, 0x00000171, + 0x000000B9, 0x0000005C, 0x0000002E, 0x00000017, 0x0000000C, 0x00000006, 0x00000003, 0x00000001 }; + if(!m) + return 0x80000000; + uint32 mx = 0x80000000, my = 0; + for(unsigned int i=1; i> i; + } + } + return mx; + } + + /// Fixed point binary logarithm. + /// This uses the BKM algorithm in L-mode. + /// \param m mantissa in [1,2) as Q1.30 + /// \param n number of iterations (at most 32) + /// \return log2(\a m) as Q0.31 + inline uint32 log2(uint32 m, unsigned int n = 32) + { + static const uint32 logs[] = { + 0x80000000, 0x4AE00D1D, 0x2934F098, 0x15C01A3A, 0x0B31FB7D, 0x05AEB4DD, 0x02DCF2D1, 0x016FE50B, + 0x00B84E23, 0x005C3E10, 0x002E24CA, 0x001713D6, 0x000B8A47, 0x0005C53B, 0x0002E2A3, 0x00017153, + 0x0000B8AA, 0x00005C55, 0x00002E2B, 0x00001715, 0x00000B8B, 0x000005C5, 0x000002E3, 0x00000171, + 0x000000B9, 0x0000005C, 0x0000002E, 0x00000017, 0x0000000C, 0x00000006, 0x00000003, 0x00000001 }; + if(m == 0x40000000) + return 0; + uint32 mx = 0x40000000, my = 0; + for(unsigned int i=1; i>i); + if(mz <= m) + { + mx = mz; + my += logs[i]; + } + } + return my; + } + + /// Fixed point sine and cosine. + /// This uses the CORDIC algorithm in rotation mode. + /// \param mz angle in [-pi/2,pi/2] as Q1.30 + /// \param n number of iterations (at most 31) + /// \return sine and cosine of \a mz as Q1.30 + inline std::pair sincos(uint32 mz, unsigned int n = 31) + { + static const uint32 angles[] = { + 0x3243F6A9, 0x1DAC6705, 0x0FADBAFD, 0x07F56EA7, 0x03FEAB77, 0x01FFD55C, 0x00FFFAAB, 0x007FFF55, + 0x003FFFEB, 0x001FFFFD, 0x00100000, 0x00080000, 0x00040000, 0x00020000, 0x00010000, 0x00008000, + 0x00004000, 0x00002000, 0x00001000, 0x00000800, 0x00000400, 0x00000200, 0x00000100, 0x00000080, + 0x00000040, 0x00000020, 0x00000010, 0x00000008, 0x00000004, 0x00000002, 0x00000001 }; + uint32 mx = 0x26DD3B6A, my = 0; + for(unsigned int i=0; i0x3FF)<<10); + int exp = (abs>>10) + (abs<=0x3FF) - 15; + if(abs < 0x3A48) + return k = 0, m << (exp+20); + #if HALF_ENABLE_CPP11_LONG_LONG + unsigned long long y = m * 0xA2F9836E4E442, mask = (1ULL<<(62-exp)) - 1, yi = (y+(mask>>1)) & ~mask, f = y - yi; + uint32 sign = -static_cast(f>>63); + k = static_cast(yi>>(62-exp)); + return (multiply64(static_cast((sign ? -f : f)>>(31-exp)), 0xC90FDAA2)^sign) - sign; + #else + uint32 yh = m*0xA2F98 + mulhi(m, 0x36E4E442), yl = (m*0x36E4E442) & 0xFFFFFFFF; + uint32 mask = (static_cast(1)<<(30-exp)) - 1, yi = (yh+(mask>>1)) & ~mask, sign = -static_cast(yi>yh); + k = static_cast(yi>>(30-exp)); + uint32 fh = (yh^sign) + (yi^~sign) - ~sign, fl = (yl^sign) - sign; + return (multiply64((exp>-1) ? (((fh<<(1+exp))&0xFFFFFFFF)|((fl&0xFFFFFFFF)>>(31-exp))) : fh, 0xC90FDAA2)^sign) - sign; + #endif + } + + /// Get arguments for atan2 function. + /// \param abs half-precision floating-point value + /// \return \a abs and sqrt(1 - \a abs^2) as Q0.30 + inline std::pair atan2_args(unsigned int abs) + { + int exp = -15; + for(; abs<0x400; abs<<=1,--exp) ; + exp += abs >> 10; + uint32 my = ((abs&0x3FF)|0x400) << 5, r = my * my; + int rexp = 2 * exp; + r = 0x40000000 - ((rexp>-31) ? ((r>>-rexp)|((r&((static_cast(1)<<-rexp)-1))!=0)) : 1); + for(rexp=0; r<0x40000000; r<<=1,--rexp) ; + uint32 mx = sqrt<30>(r, rexp); + int d = exp - rexp; + if(d < 0) + return std::make_pair((d<-14) ? ((my>>(-d-14))+((my>>(-d-15))&1)) : (my<<(14+d)), (mx<<14)+(r<<13)/mx); + if(d > 0) + return std::make_pair(my<<14, (d>14) ? ((mx>>(d-14))+((mx>>(d-15))&1)) : ((d==14) ? mx : ((mx<<(14-d))+(r<<(13-d))/mx))); + return std::make_pair(my<<13, (mx<<13)+(r<<12)/mx); + } + + /// Get exponentials for hyperbolic computation + /// \param abs half-precision floating-point value + /// \param exp variable to take unbiased exponent of larger result + /// \param n number of BKM iterations (at most 32) + /// \return exp(abs) and exp(-\a abs) as Q1.31 with same exponent + inline std::pair hyperbolic_args(unsigned int abs, int &exp, unsigned int n = 32) + { + uint32 mx = detail::multiply64(static_cast((abs&0x3FF)+((abs>0x3FF)<<10))<<21, 0xB8AA3B29), my; + int e = (abs>>10) + (abs<=0x3FF); + if(e < 14) + { + exp = 0; + mx >>= 14 - e; + } + else + { + exp = mx >> (45-e); + mx = (mx<<(e-14)) & 0x7FFFFFFF; + } + mx = exp2(mx, n); + int d = exp << 1, s; + if(mx > 0x80000000) + { + my = divide64(0x80000000, mx, s); + my |= s; + ++d; + } + else + my = mx; + return std::make_pair(mx, (d<31) ? ((my>>d)|((my&((static_cast(1)< unsigned int exp2_post(uint32 m, int exp, bool esign, unsigned int sign = 0) + { + int s = 0; + if(esign) + { + if(m > 0x80000000) + { + m = divide64(0x80000000, m, s); + ++exp; + } + if(exp > 25) + return underflow(sign); + else if(exp == 25) + return rounded(sign, 1, (m&0x7FFFFFFF)!=0); + exp = -exp; + } + else if(exp > 15) + return overflow(sign); + return fixed2half(m, exp+14, sign, s); + } + + /// Postprocessing for binary logarithm. + /// \tparam R rounding mode to use + /// \tparam L logarithm for base transformation as Q1.31 + /// \param m fractional part of logarithm as Q0.31 + /// \param ilog signed integer part of logarithm + /// \param exp biased exponent of result + /// \param sign sign bit of result + /// \return value base-transformed and converted to half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if no other exception occurred + template unsigned int log2_post(uint32 m, int ilog, int exp, unsigned int sign = 0) + { + uint32 msign = sign_mask(ilog); + m = (((static_cast(ilog)<<27)+(m>>4))^msign) - msign; + if(!m) + return 0; + for(; m<0x80000000; m<<=1,--exp) ; + int i = m >= L, s; + exp += i; + m >>= 1 + i; + sign ^= msign & 0x8000; + if(exp < -11) + return underflow(sign); + m = divide64(m, L, s); + return fixed2half(m, exp, sign, 1); + } + + /// Hypotenuse square root and postprocessing. + /// \tparam R rounding mode to use + /// \param r mantissa as Q2.30 + /// \param exp unbiased exponent + /// \return square root converted to half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if value had to be rounded + template unsigned int hypot_post(uint32 r, int exp) + { + int i = r >> 31; + if((exp+=i) > 46) + return overflow(); + if(exp < -34) + return underflow(); + r = (r>>i) | (r&i); + uint32 m = sqrt<30>(r, exp+=15); + return fixed2half(m, exp-1, 0, r!=0); + } + + /// Division and postprocessing for tangents. + /// \tparam R rounding mode to use + /// \param my dividend as Q1.31 + /// \param mx divisor as Q1.31 + /// \param exp biased exponent of result + /// \param sign sign bit of result + /// \return quotient converted to half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if no other exception occurred + template unsigned int tangent_post(uint32 my, uint32 mx, int exp, unsigned int sign = 0) + { + int i = my >= mx, s; + exp += i; + if(exp > 29) + return overflow(sign); + if(exp < -11) + return underflow(sign); + uint32 m = divide64(my>>(i+1), mx, s); + return fixed2half(m, exp, sign, s); + } + + /// Area function and postprocessing. + /// This computes the value directly in Q2.30 using the representation `asinh|acosh(x) = log(x+sqrt(x^2+|-1))`. + /// \tparam R rounding mode to use + /// \tparam S `true` for asinh, `false` for acosh + /// \param arg half-precision argument + /// \return asinh|acosh(\a arg) converted to half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if no other exception occurred + template unsigned int area(unsigned int arg) + { + int abs = arg & 0x7FFF, expx = (abs>>10) + (abs<=0x3FF) - 15, expy = -15, ilog, i; + uint32 mx = static_cast((abs&0x3FF)|((abs>0x3FF)<<10)) << 20, my, r; + for(; abs<0x400; abs<<=1,--expy) ; + expy += abs >> 10; + r = ((abs&0x3FF)|0x400) << 5; + r *= r; + i = r >> 31; + expy = 2*expy + i; + r >>= i; + if(S) + { + if(expy < 0) + { + r = 0x40000000 + ((expy>-30) ? ((r>>-expy)|((r&((static_cast(1)<<-expy)-1))!=0)) : 1); + expy = 0; + } + else + { + r += 0x40000000 >> expy; + i = r >> 31; + r = (r>>i) | (r&i); + expy += i; + } + } + else + { + r -= 0x40000000 >> expy; + for(; r<0x40000000; r<<=1,--expy) ; + } + my = sqrt<30>(r, expy); + my = (my<<15) + (r<<14)/my; + if(S) + { + mx >>= expy - expx; + ilog = expy; + } + else + { + my >>= expx - expy; + ilog = expx; + } + my += mx; + i = my >> 31; + static const int G = S && (R==std::round_to_nearest); + return log2_post(log2(my>>i, 26+S+G)+(G<<3), ilog+i, 17, arg&(static_cast(S)<<15)); + } + + /// Class for 1.31 unsigned floating-point computation + struct f31 + { + /// Constructor. + /// \param mant mantissa as 1.31 + /// \param e exponent + HALF_CONSTEXPR f31(uint32 mant, int e) : m(mant), exp(e) {} + + /// Constructor. + /// \param abs unsigned half-precision value + f31(unsigned int abs) : exp(-15) + { + for(; abs<0x400; abs<<=1,--exp) ; + m = static_cast((abs&0x3FF)|0x400) << 21; + exp += (abs>>10); + } + + /// Addition operator. + /// \param a first operand + /// \param b second operand + /// \return \a a + \a b + friend f31 operator+(f31 a, f31 b) + { + if(b.exp > a.exp) + std::swap(a, b); + int d = a.exp - b.exp; + uint32 m = a.m + ((d<32) ? (b.m>>d) : 0); + int i = (m&0xFFFFFFFF) < a.m; + return f31(((m+i)>>i)|0x80000000, a.exp+i); + } + + /// Subtraction operator. + /// \param a first operand + /// \param b second operand + /// \return \a a - \a b + friend f31 operator-(f31 a, f31 b) + { + int d = a.exp - b.exp, exp = a.exp; + uint32 m = a.m - ((d<32) ? (b.m>>d) : 0); + if(!m) + return f31(0, -32); + for(; m<0x80000000; m<<=1,--exp) ; + return f31(m, exp); + } + + /// Multiplication operator. + /// \param a first operand + /// \param b second operand + /// \return \a a * \a b + friend f31 operator*(f31 a, f31 b) + { + uint32 m = multiply64(a.m, b.m); + int i = m >> 31; + return f31(m<<(1-i), a.exp + b.exp + i); + } + + /// Division operator. + /// \param a first operand + /// \param b second operand + /// \return \a a / \a b + friend f31 operator/(f31 a, f31 b) + { + int i = a.m >= b.m, s; + uint32 m = divide64((a.m+i)>>i, b.m, s); + return f31(m, a.exp - b.exp + i - 1); + } + + uint32 m; ///< mantissa as 1.31. + int exp; ///< exponent. + }; + + /// Error function and postprocessing. + /// This computes the value directly in Q1.31 using the approximations given + /// [here](https://en.wikipedia.org/wiki/Error_function#Approximation_with_elementary_functions). + /// \tparam R rounding mode to use + /// \tparam C `true` for comlementary error function, `false` else + /// \param arg half-precision function argument + /// \return approximated value of error function in half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if no other exception occurred + template unsigned int erf(unsigned int arg) + { + unsigned int abs = arg & 0x7FFF, sign = arg & 0x8000; + f31 x(abs), x2 = x * x * f31(0xB8AA3B29, 0), t = f31(0x80000000, 0) / (f31(0x80000000, 0)+f31(0xA7BA054A, -2)*x), t2 = t * t; + f31 e = ((f31(0x87DC2213, 0)*t2+f31(0xB5F0E2AE, 0))*t2+f31(0x82790637, -2)-(f31(0xBA00E2B8, 0)*t2+f31(0x91A98E62, -2))*t) * t / + ((x2.exp<0) ? f31(exp2((x2.exp>-32) ? (x2.m>>-x2.exp) : 0, 30), 0) : f31(exp2((x2.m<>(31-x2.exp))); + return (!C || sign) ? fixed2half(0x80000000-(e.m>>(C-e.exp)), 14+C, sign&(C-1U)) : + (e.exp<-25) ? underflow() : fixed2half(e.m>>1, e.exp+14, 0, e.m&1); + } + + /// Gamma function and postprocessing. + /// This approximates the value of either the gamma function or its logarithm directly in Q1.31. + /// \tparam R rounding mode to use + /// \tparam L `true` for lograithm of gamma function, `false` for gamma function + /// \param arg half-precision floating-point value + /// \return lgamma/tgamma(\a arg) in half-precision + /// \exception FE_OVERFLOW on overflows + /// \exception FE_UNDERFLOW on underflows + /// \exception FE_INEXACT if \a arg is not a positive integer + template unsigned int gamma(unsigned int arg) + { +/* static const double p[] ={ 2.50662827563479526904, 225.525584619175212544, -268.295973841304927459, 80.9030806934622512966, -5.00757863970517583837, 0.0114684895434781459556 }; + double t = arg + 4.65, s = p[0]; + for(unsigned int i=0; i<5; ++i) + s += p[i+1] / (arg+i); + return std::log(s) + (arg-0.5)*std::log(t) - t; +*/ static const f31 pi(0xC90FDAA2, 1), lbe(0xB8AA3B29, 0); + unsigned int abs = arg & 0x7FFF, sign = arg & 0x8000; + bool bsign = sign != 0; + f31 z(abs), x = sign ? (z+f31(0x80000000, 0)) : z, t = x + f31(0x94CCCCCD, 2), s = + f31(0xA06C9901, 1) + f31(0xBBE654E2, -7)/(x+f31(0x80000000, 2)) + f31(0xA1CE6098, 6)/(x+f31(0x80000000, 1)) + + f31(0xE1868CB7, 7)/x - f31(0x8625E279, 8)/(x+f31(0x80000000, 0)) - f31(0xA03E158F, 2)/(x+f31(0xC0000000, 1)); + int i = (s.exp>=2) + (s.exp>=4) + (s.exp>=8) + (s.exp>=16); + s = f31((static_cast(s.exp)<<(31-i))+(log2(s.m>>1, 28)>>i), i) / lbe; + if(x.exp != -1 || x.m != 0x80000000) + { + i = (t.exp>=2) + (t.exp>=4) + (t.exp>=8); + f31 l = f31((static_cast(t.exp)<<(31-i))+(log2(t.m>>1, 30)>>i), i) / lbe; + s = (x.exp<-1) ? (s-(f31(0x80000000, -1)-x)*l) : (s+(x-f31(0x80000000, -1))*l); + } + s = x.exp ? (s-t) : (t-s); + if(bsign) + { + if(z.exp >= 0) + { + sign &= (L|((z.m>>(31-z.exp))&1)) - 1; + for(z=f31((z.m<<(1+z.exp))&0xFFFFFFFF, -1); z.m<0x80000000; z.m<<=1,--z.exp) ; + } + if(z.exp == -1) + z = f31(0x80000000, 0) - z; + if(z.exp < -1) + { + z = z * pi; + z.m = sincos(z.m>>(1-z.exp), 30).first; + for(z.exp=1; z.m<0x80000000; z.m<<=1,--z.exp) ; + } + else + z = f31(0x80000000, 0); + } + if(L) + { + if(bsign) + { + f31 l(0x92868247, 0); + if(z.exp < 0) + { + uint32 m = log2((z.m+1)>>1, 27); + z = f31(-((static_cast(z.exp)<<26)+(m>>5)), 5); + for(; z.m<0x80000000; z.m<<=1,--z.exp) ; + l = l + z / lbe; + } + sign = static_cast(x.exp&&(l.exp(x.exp==0) << 15; + if(s.exp < -24) + return underflow(sign); + if(s.exp > 15) + return overflow(sign); + } + } + else + { + s = s * lbe; + uint32 m; + if(s.exp < 0) + { + m = s.m >> -s.exp; + s.exp = 0; + } + else + { + m = (s.m<>(31-s.exp)); + } + s.m = exp2(m, 27); + if(!x.exp) + s = f31(0x80000000, 0) / s; + if(bsign) + { + if(z.exp < 0) + s = s * z; + s = pi / s; + if(s.exp < -24) + return underflow(sign); + } + else if(z.exp > 0 && !(z.m&((1<<(31-z.exp))-1))) + return ((s.exp+14)<<10) + (s.m>>21); + if(s.exp > 15) + return overflow(sign); + } + return fixed2half(s.m, s.exp+14, sign); + } + /// \} + + template struct half_caster; + } + + /// Half-precision floating-point type. + /// This class implements an IEEE-conformant half-precision floating-point type with the usual arithmetic + /// operators and conversions. It is implicitly convertible to single-precision floating-point, which makes artihmetic + /// expressions and functions with mixed-type operands to be of the most precise operand type. + /// + /// According to the C++98/03 definition, the half type is not a POD type. But according to C++11's less strict and + /// extended definitions it is both a standard layout type and a trivially copyable type (even if not a POD type), which + /// means it can be standard-conformantly copied using raw binary copies. But in this context some more words about the + /// actual size of the type. Although the half is representing an IEEE 16-bit type, it does not neccessarily have to be of + /// exactly 16-bits size. But on any reasonable implementation the actual binary representation of this type will most + /// probably not ivolve any additional "magic" or padding beyond the simple binary representation of the underlying 16-bit + /// IEEE number, even if not strictly guaranteed by the standard. But even then it only has an actual size of 16 bits if + /// your C++ implementation supports an unsigned integer type of exactly 16 bits width. But this should be the case on + /// nearly any reasonable platform. + /// + /// So if your C++ implementation is not totally exotic or imposes special alignment requirements, it is a reasonable + /// assumption that the data of a half is just comprised of the 2 bytes of the underlying IEEE representation. + class half + { + public: + /// \name Construction and assignment + /// \{ + + /// Default constructor. + /// This initializes the half to 0. Although this does not match the builtin types' default-initialization semantics + /// and may be less efficient than no initialization, it is needed to provide proper value-initialization semantics. + HALF_CONSTEXPR half() HALF_NOEXCEPT : data_() {} + + /// Conversion constructor. + /// \param rhs float to convert + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + explicit half(float rhs) : data_(static_cast(detail::float2half(rhs))) {} + + /// Conversion to single-precision. + /// \return single precision value representing expression value + operator float() const { return detail::half2float(data_); } + + /// Assignment operator. + /// \param rhs single-precision value to copy from + /// \return reference to this half + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + half& operator=(float rhs) { data_ = static_cast(detail::float2half(rhs)); return *this; } + + /// \} + /// \name Arithmetic updates + /// \{ + + /// Arithmetic assignment. + /// \tparam T type of concrete half expression + /// \param rhs half expression to add + /// \return reference to this half + /// \exception FE_... according to operator+(half,half) + half& operator+=(half rhs) { return *this = *this + rhs; } + + /// Arithmetic assignment. + /// \tparam T type of concrete half expression + /// \param rhs half expression to subtract + /// \return reference to this half + /// \exception FE_... according to operator-(half,half) + half& operator-=(half rhs) { return *this = *this - rhs; } + + /// Arithmetic assignment. + /// \tparam T type of concrete half expression + /// \param rhs half expression to multiply with + /// \return reference to this half + /// \exception FE_... according to operator*(half,half) + half& operator*=(half rhs) { return *this = *this * rhs; } + + /// Arithmetic assignment. + /// \tparam T type of concrete half expression + /// \param rhs half expression to divide by + /// \return reference to this half + /// \exception FE_... according to operator/(half,half) + half& operator/=(half rhs) { return *this = *this / rhs; } + + /// Arithmetic assignment. + /// \param rhs single-precision value to add + /// \return reference to this half + /// \exception FE_... according to operator=() + half& operator+=(float rhs) { return *this = *this + rhs; } + + /// Arithmetic assignment. + /// \param rhs single-precision value to subtract + /// \return reference to this half + /// \exception FE_... according to operator=() + half& operator-=(float rhs) { return *this = *this - rhs; } + + /// Arithmetic assignment. + /// \param rhs single-precision value to multiply with + /// \return reference to this half + /// \exception FE_... according to operator=() + half& operator*=(float rhs) { return *this = *this * rhs; } + + /// Arithmetic assignment. + /// \param rhs single-precision value to divide by + /// \return reference to this half + /// \exception FE_... according to operator=() + half& operator/=(float rhs) { return *this = *this / rhs; } + + /// \} + /// \name Increment and decrement + /// \{ + + /// Prefix increment. + /// \return incremented half value + /// \exception FE_... according to operator+(half,half) + half& operator++() { return *this = *this + half(detail::binary, 0x3C00); } + + /// Prefix decrement. + /// \return decremented half value + /// \exception FE_... according to operator-(half,half) + half& operator--() { return *this = *this + half(detail::binary, 0xBC00); } + + /// Postfix increment. + /// \return non-incremented half value + /// \exception FE_... according to operator+(half,half) + half operator++(int) { half out(*this); ++*this; return out; } + + /// Postfix decrement. + /// \return non-decremented half value + /// \exception FE_... according to operator-(half,half) + half operator--(int) { half out(*this); --*this; return out; } + /// \} + + private: + /// Rounding mode to use + static const std::float_round_style round_style = (std::float_round_style)(HALF_ROUND_STYLE); + + /// Constructor. + /// \param bits binary representation to set half to + HALF_CONSTEXPR half(detail::binary_t, unsigned int bits) HALF_NOEXCEPT : data_(static_cast(bits)) {} + + /// Internal binary representation + detail::uint16 data_; + + #ifndef HALF_DOXYGEN_ONLY + friend HALF_CONSTEXPR_NOERR bool operator==(half, half); + friend HALF_CONSTEXPR_NOERR bool operator!=(half, half); + friend HALF_CONSTEXPR_NOERR bool operator<(half, half); + friend HALF_CONSTEXPR_NOERR bool operator>(half, half); + friend HALF_CONSTEXPR_NOERR bool operator<=(half, half); + friend HALF_CONSTEXPR_NOERR bool operator>=(half, half); + friend HALF_CONSTEXPR half operator-(half); + friend half operator+(half, half); + friend half operator-(half, half); + friend half operator*(half, half); + friend half operator/(half, half); + template friend std::basic_ostream& operator<<(std::basic_ostream&, half); + template friend std::basic_istream& operator>>(std::basic_istream&, half&); + friend HALF_CONSTEXPR half fabs(half); + friend half fmod(half, half); + friend half remainder(half, half); + friend half remquo(half, half, int*); + friend half fma(half, half, half); + friend HALF_CONSTEXPR_NOERR half fmax(half, half); + friend HALF_CONSTEXPR_NOERR half fmin(half, half); + friend half fdim(half, half); + friend half nanh(const char*); + friend half exp(half); + friend half exp2(half); + friend half expm1(half); + friend half log(half); + friend half log10(half); + friend half log2(half); + friend half log1p(half); + friend half sqrt(half); + friend half cbrt(half); + friend half hypot(half, half); + friend half hypot(half, half, half); + friend half pow(half, half); + friend void sincos(half, half*, half*); + friend half sin(half); + friend half cos(half); + friend half tan(half); + friend half asin(half); + friend half acos(half); + friend half atan(half); + friend half atan2(half, half); + friend half sinh(half); + friend half cosh(half); + friend half tanh(half); + friend half asinh(half); + friend half acosh(half); + friend half atanh(half); + friend half erf(half); + friend half erfc(half); + friend half lgamma(half); + friend half tgamma(half); + friend half ceil(half); + friend half floor(half); + friend half trunc(half); + friend half round(half); + friend long lround(half); + friend half rint(half); + friend long lrint(half); + friend half nearbyint(half); + #ifdef HALF_ENABLE_CPP11_LONG_LONG + friend long long llround(half); + friend long long llrint(half); + #endif + friend half frexp(half, int*); + friend half scalbln(half, long); + friend half modf(half, half*); + friend int ilogb(half); + friend half logb(half); + friend half nextafter(half, half); + friend half nexttoward(half, long double); + friend HALF_CONSTEXPR half copysign(half, half); + friend HALF_CONSTEXPR int fpclassify(half); + friend HALF_CONSTEXPR bool isfinite(half); + friend HALF_CONSTEXPR bool isinf(half); + friend HALF_CONSTEXPR bool isnan(half); + friend HALF_CONSTEXPR bool isnormal(half); + friend HALF_CONSTEXPR bool signbit(half); + friend HALF_CONSTEXPR bool isgreater(half, half); + friend HALF_CONSTEXPR bool isgreaterequal(half, half); + friend HALF_CONSTEXPR bool isless(half, half); + friend HALF_CONSTEXPR bool islessequal(half, half); + friend HALF_CONSTEXPR bool islessgreater(half, half); + template friend struct detail::half_caster; + friend class std::numeric_limits; + #if HALF_ENABLE_CPP11_HASH + friend struct std::hash; + #endif + #if HALF_ENABLE_CPP11_USER_LITERALS + friend half literal::operator "" _h(long double); + #endif + #endif + }; + +#if HALF_ENABLE_CPP11_USER_LITERALS + namespace literal + { + /// Half literal. + /// While this returns a properly rounded half-precision value, half literals can unfortunately not be constant + /// expressions due to rather involved conversions. So don't expect this to be a literal literal without involving + /// conversion operations at runtime. It is a convenience feature, not a performance optimization. + /// \param value literal value + /// \return half with of given value (possibly rounded) + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half operator "" _h(long double value) { return half(detail::binary, detail::float2half(value)); } + } +#endif + + namespace detail + { + /// Helper class for half casts. + /// This class template has to be specialized for all valid cast arguments to define an appropriate static + /// `cast` member function and a corresponding `type` member denoting its return type. + /// \tparam T destination type + /// \tparam U source type + /// \tparam R rounding mode to use + template struct half_caster {}; + template struct half_caster + { + #if HALF_ENABLE_CPP11_STATIC_ASSERT && HALF_ENABLE_CPP11_TYPE_TRAITS + static_assert(std::is_arithmetic::value, "half_cast from non-arithmetic type unsupported"); + #endif + + static half cast(U arg) { return cast_impl(arg, is_float()); }; + + private: + static half cast_impl(U arg, true_type) { return half(binary, float2half(arg)); } + static half cast_impl(U arg, false_type) { return half(binary, int2half(arg)); } + }; + template struct half_caster + { + #if HALF_ENABLE_CPP11_STATIC_ASSERT && HALF_ENABLE_CPP11_TYPE_TRAITS + static_assert(std::is_arithmetic::value, "half_cast to non-arithmetic type unsupported"); + #endif + + static T cast(half arg) { return cast_impl(arg, is_float()); } + + private: + static T cast_impl(half arg, true_type) { return half2float(arg.data_); } + static T cast_impl(half arg, false_type) { return half2int(arg.data_); } + }; + template struct half_caster + { + static half cast(half arg) { return arg; } + }; + } +} + +/// Extensions to the C++ standard library. +namespace std +{ + /// Numeric limits for half-precision floats. + /// **See also:** Documentation for [std::numeric_limits](https://en.cppreference.com/w/cpp/types/numeric_limits) + template<> class numeric_limits + { + public: + /// Is template specialization. + static HALF_CONSTEXPR_CONST bool is_specialized = true; + + /// Supports signed values. + static HALF_CONSTEXPR_CONST bool is_signed = true; + + /// Is not an integer type. + static HALF_CONSTEXPR_CONST bool is_integer = false; + + /// Is not exact. + static HALF_CONSTEXPR_CONST bool is_exact = false; + + /// Doesn't provide modulo arithmetic. + static HALF_CONSTEXPR_CONST bool is_modulo = false; + + /// Has a finite set of values. + static HALF_CONSTEXPR_CONST bool is_bounded = true; + + /// IEEE conformant. + static HALF_CONSTEXPR_CONST bool is_iec559 = true; + + /// Supports infinity. + static HALF_CONSTEXPR_CONST bool has_infinity = true; + + /// Supports quiet NaNs. + static HALF_CONSTEXPR_CONST bool has_quiet_NaN = true; + + /// Supports signaling NaNs. + static HALF_CONSTEXPR_CONST bool has_signaling_NaN = true; + + /// Supports subnormal values. + static HALF_CONSTEXPR_CONST float_denorm_style has_denorm = denorm_present; + + /// Supports no denormalization detection. + static HALF_CONSTEXPR_CONST bool has_denorm_loss = false; + + #if HALF_ERRHANDLING_THROWS + static HALF_CONSTEXPR_CONST bool traps = true; + #else + /// Traps only if [HALF_ERRHANDLING_THROW_...](\ref HALF_ERRHANDLING_THROW_INVALID) is acitvated. + static HALF_CONSTEXPR_CONST bool traps = false; + #endif + + /// Does not support no pre-rounding underflow detection. + static HALF_CONSTEXPR_CONST bool tinyness_before = false; + + /// Rounding mode. + static HALF_CONSTEXPR_CONST float_round_style round_style = half_float::half::round_style; + + /// Significant digits. + static HALF_CONSTEXPR_CONST int digits = 11; + + /// Significant decimal digits. + static HALF_CONSTEXPR_CONST int digits10 = 3; + + /// Required decimal digits to represent all possible values. + static HALF_CONSTEXPR_CONST int max_digits10 = 5; + + /// Number base. + static HALF_CONSTEXPR_CONST int radix = 2; + + /// One more than smallest exponent. + static HALF_CONSTEXPR_CONST int min_exponent = -13; + + /// Smallest normalized representable power of 10. + static HALF_CONSTEXPR_CONST int min_exponent10 = -4; + + /// One more than largest exponent + static HALF_CONSTEXPR_CONST int max_exponent = 16; + + /// Largest finitely representable power of 10. + static HALF_CONSTEXPR_CONST int max_exponent10 = 4; + + /// Smallest positive normal value. + static HALF_CONSTEXPR half_float::half min() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x0400); } + + /// Smallest finite value. + static HALF_CONSTEXPR half_float::half lowest() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0xFBFF); } + + /// Largest finite value. + static HALF_CONSTEXPR half_float::half max() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x7BFF); } + + /// Difference between 1 and next representable value. + static HALF_CONSTEXPR half_float::half epsilon() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x1400); } + + /// Maximum rounding error in ULP (units in the last place). + static HALF_CONSTEXPR half_float::half round_error() HALF_NOTHROW + { return half_float::half(half_float::detail::binary, (round_style==std::round_to_nearest) ? 0x3800 : 0x3C00); } + + /// Positive infinity. + static HALF_CONSTEXPR half_float::half infinity() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x7C00); } + + /// Quiet NaN. + static HALF_CONSTEXPR half_float::half quiet_NaN() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x7FFF); } + + /// Signaling NaN. + static HALF_CONSTEXPR half_float::half signaling_NaN() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x7DFF); } + + /// Smallest positive subnormal value. + static HALF_CONSTEXPR half_float::half denorm_min() HALF_NOTHROW { return half_float::half(half_float::detail::binary, 0x0001); } + }; + +#if HALF_ENABLE_CPP11_HASH + /// Hash function for half-precision floats. + /// This is only defined if C++11 `std::hash` is supported and enabled. + /// + /// **See also:** Documentation for [std::hash](https://en.cppreference.com/w/cpp/utility/hash) + template<> struct hash + { + /// Type of function argument. + typedef half_float::half argument_type; + + /// Function return type. + typedef size_t result_type; + + /// Compute hash function. + /// \param arg half to hash + /// \return hash value + result_type operator()(argument_type arg) const { return hash()(arg.data_&-static_cast(arg.data_!=0x8000)); } + }; +#endif +} + +namespace half_float +{ + /// \anchor compop + /// \name Comparison operators + /// \{ + + /// Comparison for equality. + /// \param x first operand + /// \param y second operand + /// \retval true if operands equal + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator==(half x, half y) + { + return !detail::compsignal(x.data_, y.data_) && (x.data_==y.data_ || !((x.data_|y.data_)&0x7FFF)); + } + + /// Comparison for inequality. + /// \param x first operand + /// \param y second operand + /// \retval true if operands not equal + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator!=(half x, half y) + { + return detail::compsignal(x.data_, y.data_) || (x.data_!=y.data_ && ((x.data_|y.data_)&0x7FFF)); + } + + /// Comparison for less than. + /// \param x first operand + /// \param y second operand + /// \retval true if \a x less than \a y + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator<(half x, half y) + { + return !detail::compsignal(x.data_, y.data_) && + ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) < ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)); + } + + /// Comparison for greater than. + /// \param x first operand + /// \param y second operand + /// \retval true if \a x greater than \a y + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator>(half x, half y) + { + return !detail::compsignal(x.data_, y.data_) && + ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) > ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)); + } + + /// Comparison for less equal. + /// \param x first operand + /// \param y second operand + /// \retval true if \a x less equal \a y + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator<=(half x, half y) + { + return !detail::compsignal(x.data_, y.data_) && + ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) <= ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)); + } + + /// Comparison for greater equal. + /// \param x first operand + /// \param y second operand + /// \retval true if \a x greater equal \a y + /// \retval false else + /// \exception FE_INVALID if \a x or \a y is NaN + inline HALF_CONSTEXPR_NOERR bool operator>=(half x, half y) + { + return !detail::compsignal(x.data_, y.data_) && + ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) >= ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)); + } + + /// \} + /// \anchor arithmetics + /// \name Arithmetic operators + /// \{ + + /// Identity. + /// \param arg operand + /// \return unchanged operand + inline HALF_CONSTEXPR half operator+(half arg) { return arg; } + + /// Negation. + /// \param arg operand + /// \return negated operand + inline HALF_CONSTEXPR half operator-(half arg) { return half(detail::binary, arg.data_^0x8000); } + + /// Addition. + /// This operation is exact to rounding for all rounding modes. + /// \param x left operand + /// \param y right operand + /// \return sum of half expressions + /// \exception FE_INVALID if \a x and \a y are infinities with different signs or signaling NaNs + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half operator+(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(detail::half2float(x.data_)+detail::half2float(y.data_))); + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF; + bool sub = ((x.data_^y.data_)&0x8000) != 0; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : (absy!=0x7C00) ? x.data_ : + (sub && absx==0x7C00) ? detail::invalid() : y.data_); + if(!absx) + return absy ? y : half(detail::binary, (half::round_style==std::round_toward_neg_infinity) ? (x.data_|y.data_) : (x.data_&y.data_)); + if(!absy) + return x; + unsigned int sign = ((sub && absy>absx) ? y.data_ : x.data_) & 0x8000; + if(absy > absx) + std::swap(absx, absy); + int exp = (absx>>10) + (absx<=0x3FF), d = exp - (absy>>10) - (absy<=0x3FF), mx = ((absx&0x3FF)|((absx>0x3FF)<<10)) << 3, my; + if(d < 13) + { + my = ((absy&0x3FF)|((absy>0x3FF)<<10)) << 3; + my = (my>>d) | ((my&((1<(half::round_style==std::round_toward_neg_infinity)<<15); + for(; mx<0x2000 && exp>1; mx<<=1,--exp) ; + } + else + { + mx += my; + int i = mx >> 14; + if((exp+=i) > 30) + return half(detail::binary, detail::overflow(sign)); + mx = (mx>>i) | (mx&i); + } + return half(detail::binary, detail::rounded(sign+((exp-1)<<10)+(mx>>3), (mx>>2)&1, (mx&0x3)!=0)); + #endif + } + + /// Subtraction. + /// This operation is exact to rounding for all rounding modes. + /// \param x left operand + /// \param y right operand + /// \return difference of half expressions + /// \exception FE_INVALID if \a x and \a y are infinities with equal signs or signaling NaNs + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half operator-(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(detail::half2float(x.data_)-detail::half2float(y.data_))); + #else + return x + -y; + #endif + } + + /// Multiplication. + /// This operation is exact to rounding for all rounding modes. + /// \param x left operand + /// \param y right operand + /// \return product of half expressions + /// \exception FE_INVALID if multiplying 0 with infinity or if \a x or \a y is signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half operator*(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(detail::half2float(x.data_)*detail::half2float(y.data_))); + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, exp = -16; + unsigned int sign = (x.data_^y.data_) & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + ((absx==0x7C00 && !absy)||(absy==0x7C00 && !absx)) ? detail::invalid() : (sign|0x7C00)); + if(!absx || !absy) + return half(detail::binary, sign); + for(; absx<0x400; absx<<=1,--exp) ; + for(; absy<0x400; absy<<=1,--exp) ; + detail::uint32 m = static_cast((absx&0x3FF)|0x400) * static_cast((absy&0x3FF)|0x400); + int i = m >> 21, s = m & i; + exp += (absx>>10) + (absy>>10) + i; + if(exp > 29) + return half(detail::binary, detail::overflow(sign)); + else if(exp < -11) + return half(detail::binary, detail::underflow(sign)); + return half(detail::binary, detail::fixed2half(m>>i, exp, sign, s)); + #endif + } + + /// Division. + /// This operation is exact to rounding for all rounding modes. + /// \param x left operand + /// \param y right operand + /// \return quotient of half expressions + /// \exception FE_INVALID if dividing 0s or infinities with each other or if \a x or \a y is signaling NaN + /// \exception FE_DIVBYZERO if dividing finite value by 0 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half operator/(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(detail::half2float(x.data_)/detail::half2float(y.data_))); + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, exp = 14; + unsigned int sign = (x.data_^y.data_) & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + (absx==absy) ? detail::invalid() : (sign|((absx==0x7C00) ? 0x7C00 : 0))); + if(!absx) + return half(detail::binary, absy ? sign : detail::invalid()); + if(!absy) + return half(detail::binary, detail::pole(sign)); + for(; absx<0x400; absx<<=1,--exp) ; + for(; absy<0x400; absy<<=1,++exp) ; + detail::uint32 mx = (absx&0x3FF) | 0x400, my = (absy&0x3FF) | 0x400; + int i = mx < my; + exp += (absx>>10) - (absy>>10) - i; + if(exp > 29) + return half(detail::binary, detail::overflow(sign)); + else if(exp < -11) + return half(detail::binary, detail::underflow(sign)); + mx <<= 12 + i; + my <<= 1; + return half(detail::binary, detail::fixed2half(mx/my, exp, sign, mx%my!=0)); + #endif + } + + /// \} + /// \anchor streaming + /// \name Input and output + /// \{ + + /// Output operator. + /// This uses the built-in functionality for streaming out floating-point numbers. + /// \param out output stream to write into + /// \param arg half expression to write + /// \return reference to output stream + template std::basic_ostream& operator<<(std::basic_ostream &out, half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return out << detail::half2float(arg.data_); + #else + return out << detail::half2float(arg.data_); + #endif + } + + /// Input operator. + /// This uses the built-in functionality for streaming in floating-point numbers, specifically double precision floating + /// point numbers (unless overridden with [HALF_ARITHMETIC_TYPE](\ref HALF_ARITHMETIC_TYPE)). So the input string is first + /// rounded to double precision using the underlying platform's current floating-point rounding mode before being rounded + /// to half-precision using the library's half-precision rounding mode. + /// \param in input stream to read from + /// \param arg half to read into + /// \return reference to input stream + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + template std::basic_istream& operator>>(std::basic_istream &in, half &arg) + { + #ifdef HALF_ARITHMETIC_TYPE + detail::internal_t f; + #else + double f; + #endif + if(in >> f) + arg.data_ = detail::float2half(f); + return in; + } + + /// \} + /// \anchor basic + /// \name Basic mathematical operations + /// \{ + + /// Absolute value. + /// **See also:** Documentation for [std::fabs](https://en.cppreference.com/w/cpp/numeric/math/fabs). + /// \param arg operand + /// \return absolute value of \a arg + inline HALF_CONSTEXPR half fabs(half arg) { return half(detail::binary, arg.data_&0x7FFF); } + + /// Absolute value. + /// **See also:** Documentation for [std::abs](https://en.cppreference.com/w/cpp/numeric/math/fabs). + /// \param arg operand + /// \return absolute value of \a arg + inline HALF_CONSTEXPR half abs(half arg) { return fabs(arg); } + + /// Remainder of division. + /// **See also:** Documentation for [std::fmod](https://en.cppreference.com/w/cpp/numeric/math/fmod). + /// \param x first operand + /// \param y second operand + /// \return remainder of floating-point division. + /// \exception FE_INVALID if \a x is infinite or \a y is 0 or if \a x or \a y is signaling NaN + inline half fmod(half x, half y) + { + unsigned int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, sign = x.data_ & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + (absx==0x7C00) ? detail::invalid() : x.data_); + if(!absy) + return half(detail::binary, detail::invalid()); + if(!absx) + return x; + if(absx == absy) + return half(detail::binary, sign); + return half(detail::binary, sign|detail::mod(absx, absy)); + } + + /// Remainder of division. + /// **See also:** Documentation for [std::remainder](https://en.cppreference.com/w/cpp/numeric/math/remainder). + /// \param x first operand + /// \param y second operand + /// \return remainder of floating-point division. + /// \exception FE_INVALID if \a x is infinite or \a y is 0 or if \a x or \a y is signaling NaN + inline half remainder(half x, half y) + { + unsigned int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, sign = x.data_ & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + (absx==0x7C00) ? detail::invalid() : x.data_); + if(!absy) + return half(detail::binary, detail::invalid()); + if(absx == absy) + return half(detail::binary, sign); + return half(detail::binary, sign^detail::mod(absx, absy)); + } + + /// Remainder of division. + /// **See also:** Documentation for [std::remquo](https://en.cppreference.com/w/cpp/numeric/math/remquo). + /// \param x first operand + /// \param y second operand + /// \param quo address to store some bits of quotient at + /// \return remainder of floating-point division. + /// \exception FE_INVALID if \a x is infinite or \a y is 0 or if \a x or \a y is signaling NaN + inline half remquo(half x, half y, int *quo) + { + unsigned int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, value = x.data_ & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + (absx==0x7C00) ? detail::invalid() : (*quo = 0, x.data_)); + if(!absy) + return half(detail::binary, detail::invalid()); + bool qsign = ((value^y.data_)&0x8000) != 0; + int q = 1; + if(absx != absy) + value ^= detail::mod(absx, absy, &q); + return *quo = qsign ? -q : q, half(detail::binary, value); + } + + /// Fused multiply add. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::fma](https://en.cppreference.com/w/cpp/numeric/math/fma). + /// \param x first operand + /// \param y second operand + /// \param z third operand + /// \return ( \a x * \a y ) + \a z rounded as one operation. + /// \exception FE_INVALID according to operator*() and operator+() unless any argument is a quiet NaN and no argument is a signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding the final addition + inline half fma(half x, half y, half z) + { + #ifdef HALF_ARITHMETIC_TYPE + detail::internal_t fx = detail::half2float(x.data_), fy = detail::half2float(y.data_), fz = detail::half2float(z.data_); + #if HALF_ENABLE_CPP11_CMATH && FP_FAST_FMA + return half(detail::binary, detail::float2half(std::fma(fx, fy, fz))); + #else + return half(detail::binary, detail::float2half(fx*fy+fz)); + #endif + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, absz = z.data_ & 0x7FFF, exp = -15; + unsigned int sign = (x.data_^y.data_) & 0x8000; + bool sub = ((sign^z.data_)&0x8000) != 0; + if(absx >= 0x7C00 || absy >= 0x7C00 || absz >= 0x7C00) + return (absx>0x7C00 || absy>0x7C00 || absz>0x7C00) ? half(detail::binary, detail::signal(x.data_, y.data_, z.data_)) : + (absx==0x7C00) ? half(detail::binary, (!absy || (sub && absz==0x7C00)) ? detail::invalid() : (sign|0x7C00)) : + (absy==0x7C00) ? half(detail::binary, (!absx || (sub && absz==0x7C00)) ? detail::invalid() : (sign|0x7C00)) : z; + if(!absx || !absy) + return absz ? z : half(detail::binary, (half::round_style==std::round_toward_neg_infinity) ? (z.data_|sign) : (z.data_&sign)); + for(; absx<0x400; absx<<=1,--exp) ; + for(; absy<0x400; absy<<=1,--exp) ; + detail::uint32 m = static_cast((absx&0x3FF)|0x400) * static_cast((absy&0x3FF)|0x400); + int i = m >> 21; + exp += (absx>>10) + (absy>>10) + i; + m <<= 3 - i; + if(absz) + { + int expz = 0; + for(; absz<0x400; absz<<=1,--expz) ; + expz += absz >> 10; + detail::uint32 mz = static_cast((absz&0x3FF)|0x400) << 13; + if(expz > exp || (expz == exp && mz > m)) + { + std::swap(m, mz); + std::swap(exp, expz); + if(sub) + sign = z.data_ & 0x8000; + } + int d = exp - expz; + mz = (d<23) ? ((mz>>d)|((mz&((static_cast(1)<(half::round_style==std::round_toward_neg_infinity)<<15); + for(; m<0x800000; m<<=1,--exp) ; + } + else + { + m += mz; + i = m >> 24; + m = (m>>i) | (m&i); + exp += i; + } + } + if(exp > 30) + return half(detail::binary, detail::overflow(sign)); + else if(exp < -10) + return half(detail::binary, detail::underflow(sign)); + return half(detail::binary, detail::fixed2half(m, exp-1, sign)); + #endif + } + + /// Maximum of half expressions. + /// **See also:** Documentation for [std::fmax](https://en.cppreference.com/w/cpp/numeric/math/fmax). + /// \param x first operand + /// \param y second operand + /// \return maximum of operands, ignoring quiet NaNs + /// \exception FE_INVALID if \a x or \a y is signaling NaN + inline HALF_CONSTEXPR_NOERR half fmax(half x, half y) + { + return half(detail::binary, (!isnan(y) && (isnan(x) || (x.data_^(0x8000|(0x8000-(x.data_>>15)))) < + (y.data_^(0x8000|(0x8000-(y.data_>>15)))))) ? detail::select(y.data_, x.data_) : detail::select(x.data_, y.data_)); + } + + /// Minimum of half expressions. + /// **See also:** Documentation for [std::fmin](https://en.cppreference.com/w/cpp/numeric/math/fmin). + /// \param x first operand + /// \param y second operand + /// \return minimum of operands, ignoring quiet NaNs + /// \exception FE_INVALID if \a x or \a y is signaling NaN + inline HALF_CONSTEXPR_NOERR half fmin(half x, half y) + { + return half(detail::binary, (!isnan(y) && (isnan(x) || (x.data_^(0x8000|(0x8000-(x.data_>>15)))) > + (y.data_^(0x8000|(0x8000-(y.data_>>15)))))) ? detail::select(y.data_, x.data_) : detail::select(x.data_, y.data_)); + } + + /// Positive difference. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::fdim](https://en.cppreference.com/w/cpp/numeric/math/fdim). + /// \param x first operand + /// \param y second operand + /// \return \a x - \a y or 0 if difference negative + /// \exception FE_... according to operator-(half,half) + inline half fdim(half x, half y) + { + if(isnan(x) || isnan(y)) + return half(detail::binary, detail::signal(x.data_, y.data_)); + return (x.data_^(0x8000|(0x8000-(x.data_>>15)))) <= (y.data_^(0x8000|(0x8000-(y.data_>>15)))) ? half(detail::binary, 0) : (x-y); + } + + /// Get NaN value. + /// **See also:** Documentation for [std::nan](https://en.cppreference.com/w/cpp/numeric/math/nan). + /// \param arg string code + /// \return quiet NaN + inline half nanh(const char *arg) + { + unsigned int value = 0x7FFF; + while(*arg) + value ^= static_cast(*arg++) & 0xFF; + return half(detail::binary, value); + } + + /// \} + /// \anchor exponential + /// \name Exponential functions + /// \{ + + /// Exponential function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::exp](https://en.cppreference.com/w/cpp/numeric/math/exp). + /// \param arg function argument + /// \return e raised to \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half exp(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::exp(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF; + if(!abs) + return half(detail::binary, 0x3C00); + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? (0x7C00&((arg.data_>>15)-1U)) : detail::signal(arg.data_)); + if(abs >= 0x4C80) + return half(detail::binary, (arg.data_&0x8000) ? detail::underflow() : detail::overflow()); + detail::uint32 m = detail::multiply64(static_cast((abs&0x3FF)+((abs>0x3FF)<<10))<<21, 0xB8AA3B29); + int e = (abs>>10) + (abs<=0x3FF), exp; + if(e < 14) + { + exp = 0; + m >>= 14 - e; + } + else + { + exp = m >> (45-e); + m = (m<<(e-14)) & 0x7FFFFFFF; + } + return half(detail::binary, detail::exp2_post(detail::exp2(m, 26), exp, (arg.data_&0x8000)!=0)); + #endif + } + + /// Binary exponential. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::exp2](https://en.cppreference.com/w/cpp/numeric/math/exp2). + /// \param arg function argument + /// \return 2 raised to \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half exp2(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::exp2(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF; + if(!abs) + return half(detail::binary, 0x3C00); + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? (0x7C00&((arg.data_>>15)-1U)) : detail::signal(arg.data_)); + if(abs >= 0x4E40) + return half(detail::binary, (arg.data_&0x8000) ? detail::underflow() : detail::overflow()); + int e = (abs>>10) + (abs<=0x3FF), exp = (abs&0x3FF) + ((abs>0x3FF)<<10); + detail::uint32 m = detail::exp2((static_cast(exp)<<(6+e))&0x7FFFFFFF, 28); + exp >>= 25 - e; + if(m == 0x80000000) + { + if(arg.data_&0x8000) + exp = -exp; + else if(exp > 15) + return half(detail::binary, detail::overflow()); + return half(detail::binary, detail::fixed2half(m, exp+14)); + } + return half(detail::binary, detail::exp2_post(m, exp, (arg.data_&0x8000)!=0)); + #endif + } + + /// Exponential minus one. + /// This function may be 1 ULP off the correctly rounded exact result in <0.05% of inputs for `std::round_to_nearest` + /// and in <1% of inputs for any other rounding mode. + /// + /// **See also:** Documentation for [std::expm1](https://en.cppreference.com/w/cpp/numeric/math/expm1). + /// \param arg function argument + /// \return e raised to \a arg and subtracted by 1 + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half expm1(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::expm1(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ & 0x8000; + if(!abs) + return arg; + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? (0x7C00+(sign>>1)) : detail::signal(arg.data_)); + if(abs >= 0x4A00) + return half(detail::binary, (arg.data_&0x8000) ? detail::rounded(0xBBFF, 1, 1) : detail::overflow()); + detail::uint32 m = detail::multiply64(static_cast((abs&0x3FF)+((abs>0x3FF)<<10))<<21, 0xB8AA3B29); + int e = (abs>>10) + (abs<=0x3FF), exp; + if(e < 14) + { + exp = 0; + m >>= 14 - e; + } + else + { + exp = m >> (45-e); + m = (m<<(e-14)) & 0x7FFFFFFF; + } + m = detail::exp2(m); + if(sign) + { + int s = 0; + if(m > 0x80000000) + { + ++exp; + m = detail::divide64(0x80000000, m, s); + } + m = 0x80000000 - ((m>>exp)|((m&((static_cast(1)<>exp) : 1; + for(exp+=14; m<0x80000000 && exp; m<<=1,--exp) ; + if(exp > 29) + return half(detail::binary, detail::overflow()); + return half(detail::binary, detail::rounded(sign+(exp<<10)+(m>>21), (m>>20)&1, (m&0xFFFFF)!=0)); + #endif + } + + /// Natural logarithm. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::log](https://en.cppreference.com/w/cpp/numeric/math/log). + /// \param arg function argument + /// \return logarithm of \a arg to base e + /// \exception FE_INVALID for signaling NaN or negative argument + /// \exception FE_DIVBYZERO for 0 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half log(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::log(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = -15; + if(!abs) + return half(detail::binary, detail::pole(0x8000)); + if(arg.data_ & 0x8000) + return half(detail::binary, (arg.data_<=0xFC00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs >= 0x7C00) + return (abs==0x7C00) ? arg : half(detail::binary, detail::signal(arg.data_)); + for(; abs<0x400; abs<<=1,--exp) ; + exp += abs >> 10; + return half(detail::binary, detail::log2_post( + detail::log2(static_cast((abs&0x3FF)|0x400)<<20, 27)+8, exp, 17)); + #endif + } + + /// Common logarithm. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::log10](https://en.cppreference.com/w/cpp/numeric/math/log10). + /// \param arg function argument + /// \return logarithm of \a arg to base 10 + /// \exception FE_INVALID for signaling NaN or negative argument + /// \exception FE_DIVBYZERO for 0 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half log10(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::log10(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = -15; + if(!abs) + return half(detail::binary, detail::pole(0x8000)); + if(arg.data_ & 0x8000) + return half(detail::binary, (arg.data_<=0xFC00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs >= 0x7C00) + return (abs==0x7C00) ? arg : half(detail::binary, detail::signal(arg.data_)); + switch(abs) + { + case 0x4900: return half(detail::binary, 0x3C00); + case 0x5640: return half(detail::binary, 0x4000); + case 0x63D0: return half(detail::binary, 0x4200); + case 0x70E2: return half(detail::binary, 0x4400); + } + for(; abs<0x400; abs<<=1,--exp) ; + exp += abs >> 10; + return half(detail::binary, detail::log2_post( + detail::log2(static_cast((abs&0x3FF)|0x400)<<20, 27)+8, exp, 16)); + #endif + } + + /// Binary logarithm. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::log2](https://en.cppreference.com/w/cpp/numeric/math/log2). + /// \param arg function argument + /// \return logarithm of \a arg to base 2 + /// \exception FE_INVALID for signaling NaN or negative argument + /// \exception FE_DIVBYZERO for 0 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half log2(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::log2(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = -15, s = 0; + if(!abs) + return half(detail::binary, detail::pole(0x8000)); + if(arg.data_ & 0x8000) + return half(detail::binary, (arg.data_<=0xFC00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs >= 0x7C00) + return (abs==0x7C00) ? arg : half(detail::binary, detail::signal(arg.data_)); + if(abs == 0x3C00) + return half(detail::binary, 0); + for(; abs<0x400; abs<<=1,--exp) ; + exp += (abs>>10); + if(!(abs&0x3FF)) + { + unsigned int value = static_cast(exp<0) << 15, m = std::abs(exp) << 6; + for(exp=18; m<0x400; m<<=1,--exp) ; + return half(detail::binary, value+(exp<<10)+m); + } + detail::uint32 ilog = exp, sign = detail::sign_mask(ilog), m = + (((ilog<<27)+(detail::log2(static_cast((abs&0x3FF)|0x400)<<20, 28)>>4))^sign) - sign; + if(!m) + return half(detail::binary, 0); + for(exp=14; m<0x8000000 && exp; m<<=1,--exp) ; + for(; m>0xFFFFFFF; m>>=1,++exp) + s |= m & 1; + return half(detail::binary, detail::fixed2half(m, exp, sign&0x8000, s)); + #endif + } + + /// Natural logarithm plus one. + /// This function may be 1 ULP off the correctly rounded exact result in <0.05% of inputs for `std::round_to_nearest` + /// and in ~1% of inputs for any other rounding mode. + /// + /// **See also:** Documentation for [std::log1p](https://en.cppreference.com/w/cpp/numeric/math/log1p). + /// \param arg function argument + /// \return logarithm of \a arg plus 1 to base e + /// \exception FE_INVALID for signaling NaN or argument <-1 + /// \exception FE_DIVBYZERO for -1 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half log1p(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::log1p(detail::half2float(arg.data_)))); + #else + if(arg.data_ >= 0xBC00) + return half(detail::binary, (arg.data_==0xBC00) ? detail::pole(0x8000) : (arg.data_<=0xFC00) ? detail::invalid() : detail::signal(arg.data_)); + int abs = arg.data_ & 0x7FFF, exp = -15; + if(!abs || abs >= 0x7C00) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + for(; abs<0x400; abs<<=1,--exp) ; + exp += abs >> 10; + detail::uint32 m = static_cast((abs&0x3FF)|0x400) << 20; + if(arg.data_ & 0x8000) + { + m = 0x40000000 - (m>>-exp); + for(exp=0; m<0x40000000; m<<=1,--exp) ; + } + else + { + if(exp < 0) + { + m = 0x40000000 + (m>>-exp); + exp = 0; + } + else + { + m += 0x40000000 >> exp; + int i = m >> 31; + m >>= i; + exp += i; + } + } + return half(detail::binary, detail::log2_post(detail::log2(m), exp, 17)); + #endif + } + + /// \} + /// \anchor power + /// \name Power functions + /// \{ + + /// Square root. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::sqrt](https://en.cppreference.com/w/cpp/numeric/math/sqrt). + /// \param arg function argument + /// \return square root of \a arg + /// \exception FE_INVALID for signaling NaN and negative arguments + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half sqrt(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::sqrt(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = 15; + if(!abs || arg.data_ >= 0x7C00) + return half(detail::binary, (abs>0x7C00) ? detail::signal(arg.data_) : (arg.data_>0x8000) ? detail::invalid() : arg.data_); + for(; abs<0x400; abs<<=1,--exp) ; + detail::uint32 r = static_cast((abs&0x3FF)|0x400) << 10, m = detail::sqrt<20>(r, exp+=abs>>10); + return half(detail::binary, detail::rounded((exp<<10)+(m&0x3FF), r>m, r!=0)); + #endif + } + + /// Cubic root. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::cbrt](https://en.cppreference.com/w/cpp/numeric/math/cbrt). + /// \param arg function argument + /// \return cubic root of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half cbrt(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::cbrt(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = -15; + if(!abs || abs == 0x3C00 || abs >= 0x7C00) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + for(; abs<0x400; abs<<=1, --exp); + detail::uint32 ilog = exp + (abs>>10), sign = detail::sign_mask(ilog), f, m = + (((ilog<<27)+(detail::log2(static_cast((abs&0x3FF)|0x400)<<20, 24)>>4))^sign) - sign; + for(exp=2; m<0x80000000; m<<=1,--exp) ; + m = detail::multiply64(m, 0xAAAAAAAB); + int i = m >> 31, s; + exp += i; + m <<= 1 - i; + if(exp < 0) + { + f = m >> -exp; + exp = 0; + } + else + { + f = (m<> (31-exp); + } + m = detail::exp2(f, (half::round_style==std::round_to_nearest) ? 29 : 26); + if(sign) + { + if(m > 0x80000000) + { + m = detail::divide64(0x80000000, m, s); + ++exp; + } + exp = -exp; + } + return half(detail::binary, (half::round_style==std::round_to_nearest) ? + detail::fixed2half(m, exp+14, arg.data_&0x8000) : + detail::fixed2half((m+0x80)>>8, exp+14, arg.data_&0x8000)); + #endif + } + + /// Hypotenuse function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::hypot](https://en.cppreference.com/w/cpp/numeric/math/hypot). + /// \param x first argument + /// \param y second argument + /// \return square root of sum of squares without internal over- or underflows + /// \exception FE_INVALID if \a x or \a y is signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding of the final square root + inline half hypot(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + detail::internal_t fx = detail::half2float(x.data_), fy = detail::half2float(y.data_); + #if HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::hypot(fx, fy))); + #else + return half(detail::binary, detail::float2half(std::sqrt(fx*fx+fy*fy))); + #endif + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, expx = 0, expy = 0; + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx==0x7C00) ? detail::select(0x7C00, y.data_) : + (absy==0x7C00) ? detail::select(0x7C00, x.data_) : detail::signal(x.data_, y.data_)); + if(!absx) + return half(detail::binary, absy ? detail::check_underflow(absy) : 0); + if(!absy) + return half(detail::binary, detail::check_underflow(absx)); + if(absy > absx) + std::swap(absx, absy); + for(; absx<0x400; absx<<=1,--expx) ; + for(; absy<0x400; absy<<=1,--expy) ; + detail::uint32 mx = (absx&0x3FF) | 0x400, my = (absy&0x3FF) | 0x400; + mx *= mx; + my *= my; + int ix = mx >> 21, iy = my >> 21; + expx = 2*(expx+(absx>>10)) - 15 + ix; + expy = 2*(expy+(absy>>10)) - 15 + iy; + mx <<= 10 - ix; + my <<= 10 - iy; + int d = expx - expy; + my = (d<30) ? ((my>>d)|((my&((static_cast(1)<(mx+my, expx)); + #endif + } + + /// Hypotenuse function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::hypot](https://en.cppreference.com/w/cpp/numeric/math/hypot). + /// \param x first argument + /// \param y second argument + /// \param z third argument + /// \return square root of sum of squares without internal over- or underflows + /// \exception FE_INVALID if \a x, \a y or \a z is signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding of the final square root + inline half hypot(half x, half y, half z) + { + #ifdef HALF_ARITHMETIC_TYPE + detail::internal_t fx = detail::half2float(x.data_), fy = detail::half2float(y.data_), fz = detail::half2float(z.data_); + return half(detail::binary, detail::float2half(std::sqrt(fx*fx+fy*fy+fz*fz))); + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, absz = z.data_ & 0x7FFF, expx = 0, expy = 0, expz = 0; + if(!absx) + return hypot(y, z); + if(!absy) + return hypot(x, z); + if(!absz) + return hypot(x, y); + if(absx >= 0x7C00 || absy >= 0x7C00 || absz >= 0x7C00) + return half(detail::binary, (absx==0x7C00) ? detail::select(0x7C00, detail::select(y.data_, z.data_)) : + (absy==0x7C00) ? detail::select(0x7C00, detail::select(x.data_, z.data_)) : + (absz==0x7C00) ? detail::select(0x7C00, detail::select(x.data_, y.data_)) : + detail::signal(x.data_, y.data_, z.data_)); + if(absz > absy) + std::swap(absy, absz); + if(absy > absx) + std::swap(absx, absy); + if(absz > absy) + std::swap(absy, absz); + for(; absx<0x400; absx<<=1,--expx) ; + for(; absy<0x400; absy<<=1,--expy) ; + for(; absz<0x400; absz<<=1,--expz) ; + detail::uint32 mx = (absx&0x3FF) | 0x400, my = (absy&0x3FF) | 0x400, mz = (absz&0x3FF) | 0x400; + mx *= mx; + my *= my; + mz *= mz; + int ix = mx >> 21, iy = my >> 21, iz = mz >> 21; + expx = 2*(expx+(absx>>10)) - 15 + ix; + expy = 2*(expy+(absy>>10)) - 15 + iy; + expz = 2*(expz+(absz>>10)) - 15 + iz; + mx <<= 10 - ix; + my <<= 10 - iy; + mz <<= 10 - iz; + int d = expy - expz; + mz = (d<30) ? ((mz>>d)|((mz&((static_cast(1)<>1) | (my&1); + if(++expy > expx) + { + std::swap(mx, my); + std::swap(expx, expy); + } + } + d = expx - expy; + my = (d<30) ? ((my>>d)|((my&((static_cast(1)<(mx+my, expx)); + #endif + } + + /// Power function. + /// This function may be 1 ULP off the correctly rounded exact result for any rounding mode in ~0.00025% of inputs. + /// + /// **See also:** Documentation for [std::pow](https://en.cppreference.com/w/cpp/numeric/math/pow). + /// \param x base + /// \param y exponent + /// \return \a x raised to \a y + /// \exception FE_INVALID if \a x or \a y is signaling NaN or if \a x is finite an negative and \a y is finite and not integral + /// \exception FE_DIVBYZERO if \a x is 0 and \a y is negative + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half pow(half x, half y) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::pow(detail::half2float(x.data_), detail::half2float(y.data_)))); + #else + int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, exp = -15; + if(!absy || x.data_ == 0x3C00) + return half(detail::binary, detail::select(0x3C00, (x.data_==0x3C00) ? y.data_ : x.data_)); + bool is_int = absy >= 0x6400 || (absy>=0x3C00 && !(absy&((1<<(25-(absy>>10)))-1))); + unsigned int sign = x.data_ & (static_cast((absy<0x6800)&&is_int&&((absy>>(25-(absy>>10)))&1))<<15); + if(absx >= 0x7C00 || absy >= 0x7C00) + return half(detail::binary, (absx>0x7C00 || absy>0x7C00) ? detail::signal(x.data_, y.data_) : + (absy==0x7C00) ? ((absx==0x3C00) ? 0x3C00 : (!absx && y.data_==0xFC00) ? detail::pole() : + (0x7C00&-((y.data_>>15)^(absx>0x3C00)))) : (sign|(0x7C00&((y.data_>>15)-1U)))); + if(!absx) + return half(detail::binary, (y.data_&0x8000) ? detail::pole(sign) : sign); + if((x.data_&0x8000) && !is_int) + return half(detail::binary, detail::invalid()); + if(x.data_ == 0xBC00) + return half(detail::binary, sign|0x3C00); + if(y.data_ == 0x3800) + return sqrt(x); + if(y.data_ == 0x3C00) + return half(detail::binary, detail::check_underflow(x.data_)); + if(y.data_ == 0x4000) + return x * x; + for(; absx<0x400; absx<<=1,--exp) ; + detail::uint32 ilog = exp + (absx>>10), msign = detail::sign_mask(ilog), f, m = + (((ilog<<27)+((detail::log2(static_cast((absx&0x3FF)|0x400)<<20)+8)>>4))^msign) - msign; + for(exp=-11; m<0x80000000; m<<=1,--exp) ; + for(; absy<0x400; absy<<=1,--exp) ; + m = detail::multiply64(m, static_cast((absy&0x3FF)|0x400)<<21); + int i = m >> 31; + exp += (absy>>10) + i; + m <<= 1 - i; + if(exp < 0) + { + f = m >> -exp; + exp = 0; + } + else + { + f = (m<> (31-exp); + } + return half(detail::binary, detail::exp2_post(detail::exp2(f), exp, ((msign&1)^(y.data_>>15))!=0, sign)); + #endif + } + + /// \} + /// \anchor trigonometric + /// \name Trigonometric functions + /// \{ + + /// Compute sine and cosine simultaneously. + /// This returns the same results as sin() and cos() but is faster than calling each function individually. + /// + /// This function is exact to rounding for all rounding modes. + /// \param arg function argument + /// \param sin variable to take sine of \a arg + /// \param cos variable to take cosine of \a arg + /// \exception FE_INVALID for signaling NaN or infinity + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline void sincos(half arg, half *sin, half *cos) + { + #ifdef HALF_ARITHMETIC_TYPE + detail::internal_t f = detail::half2float(arg.data_); + *sin = half(detail::binary, detail::float2half(std::sin(f))); + *cos = half(detail::binary, detail::float2half(std::cos(f))); + #else + int abs = arg.data_ & 0x7FFF, sign = arg.data_ >> 15, k; + if(abs >= 0x7C00) + *sin = *cos = half(detail::binary, (abs==0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + else if(!abs) + { + *sin = arg; + *cos = half(detail::binary, 0x3C00); + } + else if(abs < 0x2500) + { + *sin = half(detail::binary, detail::rounded(arg.data_-1, 1, 1)); + *cos = half(detail::binary, detail::rounded(0x3BFF, 1, 1)); + } + else + { + if(half::round_style != std::round_to_nearest) + { + switch(abs) + { + case 0x48B7: + *sin = half(detail::binary, detail::rounded((~arg.data_&0x8000)|0x1D07, 1, 1)); + *cos = half(detail::binary, detail::rounded(0xBBFF, 1, 1)); + return; + case 0x598C: + *sin = half(detail::binary, detail::rounded((arg.data_&0x8000)|0x3BFF, 1, 1)); + *cos = half(detail::binary, detail::rounded(0x80FC, 1, 1)); + return; + case 0x6A64: + *sin = half(detail::binary, detail::rounded((~arg.data_&0x8000)|0x3BFE, 1, 1)); + *cos = half(detail::binary, detail::rounded(0x27FF, 1, 1)); + return; + case 0x6D8C: + *sin = half(detail::binary, detail::rounded((arg.data_&0x8000)|0x0FE6, 1, 1)); + *cos = half(detail::binary, detail::rounded(0x3BFF, 1, 1)); + return; + } + } + std::pair sc = detail::sincos(detail::angle_arg(abs, k), 28); + switch(k & 3) + { + case 1: sc = std::make_pair(sc.second, -sc.first); break; + case 2: sc = std::make_pair(-sc.first, -sc.second); break; + case 3: sc = std::make_pair(-sc.second, sc.first); break; + } + *sin = half(detail::binary, detail::fixed2half((sc.first^-static_cast(sign))+sign)); + *cos = half(detail::binary, detail::fixed2half(sc.second)); + } + #endif + } + + /// Sine function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::sin](https://en.cppreference.com/w/cpp/numeric/math/sin). + /// \param arg function argument + /// \return sine value of \a arg + /// \exception FE_INVALID for signaling NaN or infinity + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half sin(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::sin(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, k; + if(!abs) + return arg; + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs < 0x2900) + return half(detail::binary, detail::rounded(arg.data_-1, 1, 1)); + if(half::round_style != std::round_to_nearest) + switch(abs) + { + case 0x48B7: return half(detail::binary, detail::rounded((~arg.data_&0x8000)|0x1D07, 1, 1)); + case 0x6A64: return half(detail::binary, detail::rounded((~arg.data_&0x8000)|0x3BFE, 1, 1)); + case 0x6D8C: return half(detail::binary, detail::rounded((arg.data_&0x8000)|0x0FE6, 1, 1)); + } + std::pair sc = detail::sincos(detail::angle_arg(abs, k), 28); + detail::uint32 sign = -static_cast(((k>>1)&1)^(arg.data_>>15)); + return half(detail::binary, detail::fixed2half((((k&1) ? sc.second : sc.first)^sign) - sign)); + #endif + } + + /// Cosine function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::cos](https://en.cppreference.com/w/cpp/numeric/math/cos). + /// \param arg function argument + /// \return cosine value of \a arg + /// \exception FE_INVALID for signaling NaN or infinity + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half cos(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::cos(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, k; + if(!abs) + return half(detail::binary, 0x3C00); + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs < 0x2500) + return half(detail::binary, detail::rounded(0x3BFF, 1, 1)); + if(half::round_style != std::round_to_nearest && abs == 0x598C) + return half(detail::binary, detail::rounded(0x80FC, 1, 1)); + std::pair sc = detail::sincos(detail::angle_arg(abs, k), 28); + detail::uint32 sign = -static_cast(((k>>1)^k)&1); + return half(detail::binary, detail::fixed2half((((k&1) ? sc.first : sc.second)^sign) - sign)); + #endif + } + + /// Tangent function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::tan](https://en.cppreference.com/w/cpp/numeric/math/tan). + /// \param arg function argument + /// \return tangent value of \a arg + /// \exception FE_INVALID for signaling NaN or infinity + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half tan(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::tan(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = 13, k; + if(!abs) + return arg; + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs < 0x2700) + return half(detail::binary, detail::rounded(arg.data_, 0, 1)); + if(half::round_style != std::round_to_nearest) + switch(abs) + { + case 0x658C: return half(detail::binary, detail::rounded((arg.data_&0x8000)|0x07E6, 1, 1)); + case 0x7330: return half(detail::binary, detail::rounded((~arg.data_&0x8000)|0x4B62, 1, 1)); + } + std::pair sc = detail::sincos(detail::angle_arg(abs, k), 30); + if(k & 1) + sc = std::make_pair(-sc.second, sc.first); + detail::uint32 signy = detail::sign_mask(sc.first), signx = detail::sign_mask(sc.second); + detail::uint32 my = (sc.first^signy) - signy, mx = (sc.second^signx) - signx; + for(; my<0x80000000; my<<=1,--exp) ; + for(; mx<0x80000000; mx<<=1,++exp) ; + return half(detail::binary, detail::tangent_post(my, mx, exp, (signy^signx^arg.data_)&0x8000)); + #endif + } + + /// Arc sine. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::asin](https://en.cppreference.com/w/cpp/numeric/math/asin). + /// \param arg function argument + /// \return arc sine value of \a arg + /// \exception FE_INVALID for signaling NaN or if abs(\a arg) > 1 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half asin(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::asin(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ & 0x8000; + if(!abs) + return arg; + if(abs >= 0x3C00) + return half(detail::binary, (abs>0x7C00) ? detail::signal(arg.data_) : (abs>0x3C00) ? detail::invalid() : + detail::rounded(sign|0x3E48, 0, 1)); + if(abs < 0x2900) + return half(detail::binary, detail::rounded(arg.data_, 0, 1)); + if(half::round_style != std::round_to_nearest && (abs == 0x2B44 || abs == 0x2DC3)) + return half(detail::binary, detail::rounded(arg.data_+1, 1, 1)); + std::pair sc = detail::atan2_args(abs); + detail::uint32 m = detail::atan2(sc.first, sc.second, (half::round_style==std::round_to_nearest) ? 27 : 26); + return half(detail::binary, detail::fixed2half(m, 14, sign)); + #endif + } + + /// Arc cosine function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::acos](https://en.cppreference.com/w/cpp/numeric/math/acos). + /// \param arg function argument + /// \return arc cosine value of \a arg + /// \exception FE_INVALID for signaling NaN or if abs(\a arg) > 1 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half acos(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::acos(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ >> 15; + if(!abs) + return half(detail::binary, detail::rounded(0x3E48, 0, 1)); + if(abs >= 0x3C00) + return half(detail::binary, (abs>0x7C00) ? detail::signal(arg.data_) : (abs>0x3C00) ? detail::invalid() : + sign ? detail::rounded(0x4248, 0, 1) : 0); + std::pair cs = detail::atan2_args(abs); + detail::uint32 m = detail::atan2(cs.second, cs.first, 28); + return half(detail::binary, detail::fixed2half(sign ? (0xC90FDAA2-m) : m, 15, 0, sign)); + #endif + } + + /// Arc tangent function. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::atan](https://en.cppreference.com/w/cpp/numeric/math/atan). + /// \param arg function argument + /// \return arc tangent value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half atan(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::atan(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ & 0x8000; + if(!abs) + return arg; + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? detail::rounded(sign|0x3E48, 0, 1) : detail::signal(arg.data_)); + if(abs <= 0x2700) + return half(detail::binary, detail::rounded(arg.data_-1, 1, 1)); + int exp = (abs>>10) + (abs<=0x3FF); + detail::uint32 my = (abs&0x3FF) | ((abs>0x3FF)<<10); + detail::uint32 m = (exp>15) ? detail::atan2(my<<19, 0x20000000>>(exp-15), (half::round_style==std::round_to_nearest) ? 26 : 24) : + detail::atan2(my<<(exp+4), 0x20000000, (half::round_style==std::round_to_nearest) ? 30 : 28); + return half(detail::binary, detail::fixed2half(m, 14, sign)); + #endif + } + + /// Arc tangent function. + /// This function may be 1 ULP off the correctly rounded exact result in ~0.005% of inputs for `std::round_to_nearest`, + /// in ~0.1% of inputs for `std::round_toward_zero` and in ~0.02% of inputs for any other rounding mode. + /// + /// **See also:** Documentation for [std::atan2](https://en.cppreference.com/w/cpp/numeric/math/atan2). + /// \param y numerator + /// \param x denominator + /// \return arc tangent value + /// \exception FE_INVALID if \a x or \a y is signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half atan2(half y, half x) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::atan2(detail::half2float(y.data_), detail::half2float(x.data_)))); + #else + unsigned int absx = x.data_ & 0x7FFF, absy = y.data_ & 0x7FFF, signx = x.data_ >> 15, signy = y.data_ & 0x8000; + if(absx >= 0x7C00 || absy >= 0x7C00) + { + if(absx > 0x7C00 || absy > 0x7C00) + return half(detail::binary, detail::signal(x.data_, y.data_)); + if(absy == 0x7C00) + return half(detail::binary, (absx<0x7C00) ? detail::rounded(signy|0x3E48, 0, 1) : + signx ? detail::rounded(signy|0x40B6, 0, 1) : + detail::rounded(signy|0x3A48, 0, 1)); + return (x.data_==0x7C00) ? half(detail::binary, signy) : half(detail::binary, detail::rounded(signy|0x4248, 0, 1)); + } + if(!absy) + return signx ? half(detail::binary, detail::rounded(signy|0x4248, 0, 1)) : y; + if(!absx) + return half(detail::binary, detail::rounded(signy|0x3E48, 0, 1)); + int d = (absy>>10) + (absy<=0x3FF) - (absx>>10) - (absx<=0x3FF); + if(d > (signx ? 18 : 12)) + return half(detail::binary, detail::rounded(signy|0x3E48, 0, 1)); + if(signx && d < -11) + return half(detail::binary, detail::rounded(signy|0x4248, 0, 1)); + if(!signx && d < ((half::round_style==std::round_toward_zero) ? -15 : -9)) + { + for(; absy<0x400; absy<<=1,--d) ; + detail::uint32 mx = ((absx<<1)&0x7FF) | 0x800, my = ((absy<<1)&0x7FF) | 0x800; + int i = my < mx; + d -= i; + if(d < -25) + return half(detail::binary, detail::underflow(signy)); + my <<= 11 + i; + return half(detail::binary, detail::fixed2half(my/mx, d+14, signy, my%mx!=0)); + } + detail::uint32 m = detail::atan2( ((absy&0x3FF)|((absy>0x3FF)<<10))<<(19+((d<0) ? d : (d>0) ? 0 : -1)), + ((absx&0x3FF)|((absx>0x3FF)<<10))<<(19-((d>0) ? d : (d<0) ? 0 : 1))); + return half(detail::binary, detail::fixed2half(signx ? (0xC90FDAA2-m) : m, 15, signy, signx)); + #endif + } + + /// \} + /// \anchor hyperbolic + /// \name Hyperbolic functions + /// \{ + + /// Hyperbolic sine. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::sinh](https://en.cppreference.com/w/cpp/numeric/math/sinh). + /// \param arg function argument + /// \return hyperbolic sine value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half sinh(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::sinh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp; + if(!abs || abs >= 0x7C00) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + if(abs <= 0x2900) + return half(detail::binary, detail::rounded(arg.data_, 0, 1)); + std::pair mm = detail::hyperbolic_args(abs, exp, (half::round_style==std::round_to_nearest) ? 29 : 27); + detail::uint32 m = mm.first - mm.second; + for(exp+=13; m<0x80000000 && exp; m<<=1,--exp) ; + unsigned int sign = arg.data_ & 0x8000; + if(exp > 29) + return half(detail::binary, detail::overflow(sign)); + return half(detail::binary, detail::fixed2half(m, exp, sign)); + #endif + } + + /// Hyperbolic cosine. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::cosh](https://en.cppreference.com/w/cpp/numeric/math/cosh). + /// \param arg function argument + /// \return hyperbolic cosine value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half cosh(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::cosh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp; + if(!abs) + return half(detail::binary, 0x3C00); + if(abs >= 0x7C00) + return half(detail::binary, (abs>0x7C00) ? detail::signal(arg.data_) : 0x7C00); + std::pair mm = detail::hyperbolic_args(abs, exp, (half::round_style==std::round_to_nearest) ? 23 : 26); + detail::uint32 m = mm.first + mm.second, i = (~m&0xFFFFFFFF) >> 31; + m = (m>>i) | (m&i) | 0x80000000; + if((exp+=13+i) > 29) + return half(detail::binary, detail::overflow()); + return half(detail::binary, detail::fixed2half(m, exp)); + #endif + } + + /// Hyperbolic tangent. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::tanh](https://en.cppreference.com/w/cpp/numeric/math/tanh). + /// \param arg function argument + /// \return hyperbolic tangent value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half tanh(half arg) + { + #ifdef HALF_ARITHMETIC_TYPE + return half(detail::binary, detail::float2half(std::tanh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp; + if(!abs) + return arg; + if(abs >= 0x7C00) + return half(detail::binary, (abs>0x7C00) ? detail::signal(arg.data_) : (arg.data_-0x4000)); + if(abs >= 0x4500) + return half(detail::binary, detail::rounded((arg.data_&0x8000)|0x3BFF, 1, 1)); + if(abs < 0x2700) + return half(detail::binary, detail::rounded(arg.data_-1, 1, 1)); + if(half::round_style != std::round_to_nearest && abs == 0x2D3F) + return half(detail::binary, detail::rounded(arg.data_-3, 0, 1)); + std::pair mm = detail::hyperbolic_args(abs, exp, 27); + detail::uint32 my = mm.first - mm.second - (half::round_style!=std::round_to_nearest), mx = mm.first + mm.second, i = (~mx&0xFFFFFFFF) >> 31; + for(exp=13; my<0x80000000; my<<=1,--exp) ; + mx = (mx>>i) | 0x80000000; + return half(detail::binary, detail::tangent_post(my, mx, exp-i, arg.data_&0x8000)); + #endif + } + + /// Hyperbolic area sine. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::asinh](https://en.cppreference.com/w/cpp/numeric/math/asinh). + /// \param arg function argument + /// \return area sine value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half asinh(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::asinh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF; + if(!abs || abs >= 0x7C00) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + if(abs <= 0x2900) + return half(detail::binary, detail::rounded(arg.data_-1, 1, 1)); + if(half::round_style != std::round_to_nearest) + switch(abs) + { + case 0x32D4: return half(detail::binary, detail::rounded(arg.data_-13, 1, 1)); + case 0x3B5B: return half(detail::binary, detail::rounded(arg.data_-197, 1, 1)); + } + return half(detail::binary, detail::area(arg.data_)); + #endif + } + + /// Hyperbolic area cosine. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::acosh](https://en.cppreference.com/w/cpp/numeric/math/acosh). + /// \param arg function argument + /// \return area cosine value of \a arg + /// \exception FE_INVALID for signaling NaN or arguments <1 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half acosh(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::acosh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF; + if((arg.data_&0x8000) || abs < 0x3C00) + return half(detail::binary, (abs<=0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs == 0x3C00) + return half(detail::binary, 0); + if(arg.data_ >= 0x7C00) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + return half(detail::binary, detail::area(arg.data_)); + #endif + } + + /// Hyperbolic area tangent. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::atanh](https://en.cppreference.com/w/cpp/numeric/math/atanh). + /// \param arg function argument + /// \return area tangent value of \a arg + /// \exception FE_INVALID for signaling NaN or if abs(\a arg) > 1 + /// \exception FE_DIVBYZERO for +/-1 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half atanh(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::atanh(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF, exp = 0; + if(!abs) + return arg; + if(abs >= 0x3C00) + return half(detail::binary, (abs==0x3C00) ? detail::pole(arg.data_&0x8000) : (abs<=0x7C00) ? detail::invalid() : detail::signal(arg.data_)); + if(abs < 0x2700) + return half(detail::binary, detail::rounded(arg.data_, 0, 1)); + detail::uint32 m = static_cast((abs&0x3FF)|((abs>0x3FF)<<10)) << ((abs>>10)+(abs<=0x3FF)+6), my = 0x80000000 + m, mx = 0x80000000 - m; + for(; mx<0x80000000; mx<<=1,++exp) ; + int i = my >= mx, s; + return half(detail::binary, detail::log2_post(detail::log2( + (detail::divide64(my>>i, mx, s)+1)>>1, 27)+0x10, exp+i-1, 16, arg.data_&0x8000)); + #endif + } + + /// \} + /// \anchor special + /// \name Error and gamma functions + /// \{ + + /// Error function. + /// This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.5% of inputs. + /// + /// **See also:** Documentation for [std::erf](https://en.cppreference.com/w/cpp/numeric/math/erf). + /// \param arg function argument + /// \return error function value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half erf(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::erf(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF; + if(!abs || abs >= 0x7C00) + return (abs>=0x7C00) ? half(detail::binary, (abs==0x7C00) ? (arg.data_-0x4000) : detail::signal(arg.data_)) : arg; + if(abs >= 0x4200) + return half(detail::binary, detail::rounded((arg.data_&0x8000)|0x3BFF, 1, 1)); + return half(detail::binary, detail::erf(arg.data_)); + #endif + } + + /// Complementary error function. + /// This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.5% of inputs. + /// + /// **See also:** Documentation for [std::erfc](https://en.cppreference.com/w/cpp/numeric/math/erfc). + /// \param arg function argument + /// \return 1 minus error function value of \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half erfc(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::erfc(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ & 0x8000; + if(abs >= 0x7C00) + return (abs>=0x7C00) ? half(detail::binary, (abs==0x7C00) ? (sign>>1) : detail::signal(arg.data_)) : arg; + if(!abs) + return half(detail::binary, 0x3C00); + if(abs >= 0x4400) + return half(detail::binary, detail::rounded((sign>>1)-(sign>>15), sign>>15, 1)); + return half(detail::binary, detail::erf(arg.data_)); + #endif + } + + /// Natural logarithm of gamma function. + /// This function may be 1 ULP off the correctly rounded exact result for any rounding mode in ~0.025% of inputs. + /// + /// **See also:** Documentation for [std::lgamma](https://en.cppreference.com/w/cpp/numeric/math/lgamma). + /// \param arg function argument + /// \return natural logarith of gamma function for \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_DIVBYZERO for 0 or negative integer arguments + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half lgamma(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::lgamma(detail::half2float(arg.data_)))); + #else + int abs = arg.data_ & 0x7FFF; + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? 0x7C00 : detail::signal(arg.data_)); + if(!abs || arg.data_ >= 0xE400 || (arg.data_ >= 0xBC00 && !(abs&((1<<(25-(abs>>10)))-1)))) + return half(detail::binary, detail::pole()); + if(arg.data_ == 0x3C00 || arg.data_ == 0x4000) + return half(detail::binary, 0); + return half(detail::binary, detail::gamma(arg.data_)); + #endif + } + + /// Gamma function. + /// This function may be 1 ULP off the correctly rounded exact result for any rounding mode in <0.25% of inputs. + /// + /// **See also:** Documentation for [std::tgamma](https://en.cppreference.com/w/cpp/numeric/math/tgamma). + /// \param arg function argument + /// \return gamma function value of \a arg + /// \exception FE_INVALID for signaling NaN, negative infinity or negative integer arguments + /// \exception FE_DIVBYZERO for 0 + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half tgamma(half arg) + { + #if defined(HALF_ARITHMETIC_TYPE) && HALF_ENABLE_CPP11_CMATH + return half(detail::binary, detail::float2half(std::tgamma(detail::half2float(arg.data_)))); + #else + unsigned int abs = arg.data_ & 0x7FFF; + if(!abs) + return half(detail::binary, detail::pole(arg.data_)); + if(abs >= 0x7C00) + return (arg.data_==0x7C00) ? arg : half(detail::binary, detail::signal(arg.data_)); + if(arg.data_ >= 0xE400 || (arg.data_ >= 0xBC00 && !(abs&((1<<(25-(abs>>10)))-1)))) + return half(detail::binary, detail::invalid()); + if(arg.data_ >= 0xCA80) + return half(detail::binary, detail::underflow((1-((abs>>(25-(abs>>10)))&1))<<15)); + if(arg.data_ <= 0x100 || (arg.data_ >= 0x4900 && arg.data_ < 0x8000)) + return half(detail::binary, detail::overflow()); + if(arg.data_ == 0x3C00) + return arg; + return half(detail::binary, detail::gamma(arg.data_)); + #endif + } + + /// \} + /// \anchor rounding + /// \name Rounding + /// \{ + + /// Nearest integer not less than half value. + /// **See also:** Documentation for [std::ceil](https://en.cppreference.com/w/cpp/numeric/math/ceil). + /// \param arg half to round + /// \return nearest integer not less than \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded + inline half ceil(half arg) { return half(detail::binary, detail::integral(arg.data_)); } + + /// Nearest integer not greater than half value. + /// **See also:** Documentation for [std::floor](https://en.cppreference.com/w/cpp/numeric/math/floor). + /// \param arg half to round + /// \return nearest integer not greater than \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded + inline half floor(half arg) { return half(detail::binary, detail::integral(arg.data_)); } + + /// Nearest integer not greater in magnitude than half value. + /// **See also:** Documentation for [std::trunc](https://en.cppreference.com/w/cpp/numeric/math/trunc). + /// \param arg half to round + /// \return nearest integer not greater in magnitude than \a arg + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded + inline half trunc(half arg) { return half(detail::binary, detail::integral(arg.data_)); } + + /// Nearest integer. + /// **See also:** Documentation for [std::round](https://en.cppreference.com/w/cpp/numeric/math/round). + /// \param arg half to round + /// \return nearest integer, rounded away from zero in half-way cases + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded + inline half round(half arg) { return half(detail::binary, detail::integral(arg.data_)); } + + /// Nearest integer. + /// **See also:** Documentation for [std::lround](https://en.cppreference.com/w/cpp/numeric/math/round). + /// \param arg half to round + /// \return nearest integer, rounded away from zero in half-way cases + /// \exception FE_INVALID if value is not representable as `long` + inline long lround(half arg) { return detail::half2int(arg.data_); } + + /// Nearest integer using half's internal rounding mode. + /// **See also:** Documentation for [std::rint](https://en.cppreference.com/w/cpp/numeric/math/rint). + /// \param arg half expression to round + /// \return nearest integer using default rounding mode + /// \exception FE_INVALID for signaling NaN + /// \exception FE_INEXACT if value had to be rounded + inline half rint(half arg) { return half(detail::binary, detail::integral(arg.data_)); } + + /// Nearest integer using half's internal rounding mode. + /// **See also:** Documentation for [std::lrint](https://en.cppreference.com/w/cpp/numeric/math/rint). + /// \param arg half expression to round + /// \return nearest integer using default rounding mode + /// \exception FE_INVALID if value is not representable as `long` + /// \exception FE_INEXACT if value had to be rounded + inline long lrint(half arg) { return detail::half2int(arg.data_); } + + /// Nearest integer using half's internal rounding mode. + /// **See also:** Documentation for [std::nearbyint](https://en.cppreference.com/w/cpp/numeric/math/nearbyint). + /// \param arg half expression to round + /// \return nearest integer using default rounding mode + /// \exception FE_INVALID for signaling NaN + inline half nearbyint(half arg) { return half(detail::binary, detail::integral(arg.data_)); } +#if HALF_ENABLE_CPP11_LONG_LONG + /// Nearest integer. + /// **See also:** Documentation for [std::llround](https://en.cppreference.com/w/cpp/numeric/math/round). + /// \param arg half to round + /// \return nearest integer, rounded away from zero in half-way cases + /// \exception FE_INVALID if value is not representable as `long long` + inline long long llround(half arg) { return detail::half2int(arg.data_); } + + /// Nearest integer using half's internal rounding mode. + /// **See also:** Documentation for [std::llrint](https://en.cppreference.com/w/cpp/numeric/math/rint). + /// \param arg half expression to round + /// \return nearest integer using default rounding mode + /// \exception FE_INVALID if value is not representable as `long long` + /// \exception FE_INEXACT if value had to be rounded + inline long long llrint(half arg) { return detail::half2int(arg.data_); } +#endif + + /// \} + /// \anchor float + /// \name Floating point manipulation + /// \{ + + /// Decompress floating-point number. + /// **See also:** Documentation for [std::frexp](https://en.cppreference.com/w/cpp/numeric/math/frexp). + /// \param arg number to decompress + /// \param exp address to store exponent at + /// \return significant in range [0.5, 1) + /// \exception FE_INVALID for signaling NaN + inline half frexp(half arg, int *exp) + { + *exp = 0; + unsigned int abs = arg.data_ & 0x7FFF; + if(abs >= 0x7C00 || !abs) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + for(; abs<0x400; abs<<=1,--*exp) ; + *exp += (abs>>10) - 14; + return half(detail::binary, (arg.data_&0x8000)|0x3800|(abs&0x3FF)); + } + + /// Multiply by power of two. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::scalbln](https://en.cppreference.com/w/cpp/numeric/math/scalbn). + /// \param arg number to modify + /// \param exp power of two to multiply with + /// \return \a arg multplied by 2 raised to \a exp + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half scalbln(half arg, long exp) + { + unsigned int abs = arg.data_ & 0x7FFF, sign = arg.data_ & 0x8000; + if(abs >= 0x7C00 || !abs) + return (abs>0x7C00) ? half(detail::binary, detail::signal(arg.data_)) : arg; + for(; abs<0x400; abs<<=1,--exp) ; + exp += abs >> 10; + if(exp > 30) + return half(detail::binary, detail::overflow(sign)); + else if(exp < -10) + return half(detail::binary, detail::underflow(sign)); + else if(exp > 0) + return half(detail::binary, sign|(exp<<10)|(abs&0x3FF)); + unsigned int m = (abs&0x3FF) | 0x400; + return half(detail::binary, detail::rounded(sign|(m>>(1-exp)), (m>>-exp)&1, (m&((1<<-exp)-1))!=0)); + } + + /// Multiply by power of two. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::scalbn](https://en.cppreference.com/w/cpp/numeric/math/scalbn). + /// \param arg number to modify + /// \param exp power of two to multiply with + /// \return \a arg multplied by 2 raised to \a exp + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half scalbn(half arg, int exp) { return scalbln(arg, exp); } + + /// Multiply by power of two. + /// This function is exact to rounding for all rounding modes. + /// + /// **See also:** Documentation for [std::ldexp](https://en.cppreference.com/w/cpp/numeric/math/ldexp). + /// \param arg number to modify + /// \param exp power of two to multiply with + /// \return \a arg multplied by 2 raised to \a exp + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + inline half ldexp(half arg, int exp) { return scalbln(arg, exp); } + + /// Extract integer and fractional parts. + /// **See also:** Documentation for [std::modf](https://en.cppreference.com/w/cpp/numeric/math/modf). + /// \param arg number to decompress + /// \param iptr address to store integer part at + /// \return fractional part + /// \exception FE_INVALID for signaling NaN + inline half modf(half arg, half *iptr) + { + unsigned int abs = arg.data_ & 0x7FFF; + if(abs > 0x7C00) + { + arg = half(detail::binary, detail::signal(arg.data_)); + return *iptr = arg, arg; + } + if(abs >= 0x6400) + return *iptr = arg, half(detail::binary, arg.data_&0x8000); + if(abs < 0x3C00) + return iptr->data_ = arg.data_ & 0x8000, arg; + unsigned int exp = abs >> 10, mask = (1<<(25-exp)) - 1, m = arg.data_ & mask; + iptr->data_ = arg.data_ & ~mask; + if(!m) + return half(detail::binary, arg.data_&0x8000); + for(; m<0x400; m<<=1,--exp) ; + return half(detail::binary, (arg.data_&0x8000)|(exp<<10)|(m&0x3FF)); + } + + /// Extract exponent. + /// **See also:** Documentation for [std::ilogb](https://en.cppreference.com/w/cpp/numeric/math/ilogb). + /// \param arg number to query + /// \return floating-point exponent + /// \retval FP_ILOGB0 for zero + /// \retval FP_ILOGBNAN for NaN + /// \retval INT_MAX for infinity + /// \exception FE_INVALID for 0 or infinite values + inline int ilogb(half arg) + { + int abs = arg.data_ & 0x7FFF, exp; + if(!abs || abs >= 0x7C00) + { + detail::raise(FE_INVALID); + return !abs ? FP_ILOGB0 : (abs==0x7C00) ? INT_MAX : FP_ILOGBNAN; + } + for(exp=(abs>>10)-15; abs<0x200; abs<<=1,--exp) ; + return exp; + } + + /// Extract exponent. + /// **See also:** Documentation for [std::logb](https://en.cppreference.com/w/cpp/numeric/math/logb). + /// \param arg number to query + /// \return floating-point exponent + /// \exception FE_INVALID for signaling NaN + /// \exception FE_DIVBYZERO for 0 + inline half logb(half arg) + { + int abs = arg.data_ & 0x7FFF, exp; + if(!abs) + return half(detail::binary, detail::pole(0x8000)); + if(abs >= 0x7C00) + return half(detail::binary, (abs==0x7C00) ? 0x7C00 : detail::signal(arg.data_)); + for(exp=(abs>>10)-15; abs<0x200; abs<<=1,--exp) ; + unsigned int value = static_cast(exp<0) << 15; + if(exp) + { + unsigned int m = std::abs(exp) << 6; + for(exp=18; m<0x400; m<<=1,--exp) ; + value |= (exp<<10) + m; + } + return half(detail::binary, value); + } + + /// Next representable value. + /// **See also:** Documentation for [std::nextafter](https://en.cppreference.com/w/cpp/numeric/math/nextafter). + /// \param from value to compute next representable value for + /// \param to direction towards which to compute next value + /// \return next representable value after \a from in direction towards \a to + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW for infinite result from finite argument + /// \exception FE_UNDERFLOW for subnormal result + inline half nextafter(half from, half to) + { + int fabs = from.data_ & 0x7FFF, tabs = to.data_ & 0x7FFF; + if(fabs > 0x7C00 || tabs > 0x7C00) + return half(detail::binary, detail::signal(from.data_, to.data_)); + if(from.data_ == to.data_ || !(fabs|tabs)) + return to; + if(!fabs) + { + detail::raise(FE_UNDERFLOW, !HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT); + return half(detail::binary, (to.data_&0x8000)+1); + } + unsigned int out = from.data_ + (((from.data_>>15)^static_cast( + (from.data_^(0x8000|(0x8000-(from.data_>>15))))<(to.data_^(0x8000|(0x8000-(to.data_>>15))))))<<1) - 1; + detail::raise(FE_OVERFLOW, fabs<0x7C00 && (out&0x7C00)==0x7C00); + detail::raise(FE_UNDERFLOW, !HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT && (out&0x7C00)<0x400); + return half(detail::binary, out); + } + + /// Next representable value. + /// **See also:** Documentation for [std::nexttoward](https://en.cppreference.com/w/cpp/numeric/math/nexttoward). + /// \param from value to compute next representable value for + /// \param to direction towards which to compute next value + /// \return next representable value after \a from in direction towards \a to + /// \exception FE_INVALID for signaling NaN + /// \exception FE_OVERFLOW for infinite result from finite argument + /// \exception FE_UNDERFLOW for subnormal result + inline half nexttoward(half from, long double to) + { + int fabs = from.data_ & 0x7FFF; + if(fabs > 0x7C00) + return half(detail::binary, detail::signal(from.data_)); + long double lfrom = static_cast(from); + if(detail::builtin_isnan(to) || lfrom == to) + return half(static_cast(to)); + if(!fabs) + { + detail::raise(FE_UNDERFLOW, !HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT); + return half(detail::binary, (static_cast(detail::builtin_signbit(to))<<15)+1); + } + unsigned int out = from.data_ + (((from.data_>>15)^static_cast(lfrom 0x7C00; } + + /// Check if normal number. + /// **See also:** Documentation for [std::isnormal](https://en.cppreference.com/w/cpp/numeric/math/isnormal). + /// \param arg number to check + /// \retval true if normal number + /// \retval false if either subnormal, zero, infinity or NaN + inline HALF_CONSTEXPR bool isnormal(half arg) { return ((arg.data_&0x7C00)!=0) & ((arg.data_&0x7C00)!=0x7C00); } + + /// Check sign. + /// **See also:** Documentation for [std::signbit](https://en.cppreference.com/w/cpp/numeric/math/signbit). + /// \param arg number to check + /// \retval true for negative number + /// \retval false for positive number + inline HALF_CONSTEXPR bool signbit(half arg) { return (arg.data_&0x8000) != 0; } + + /// \} + /// \anchor compfunc + /// \name Comparison + /// \{ + + /// Quiet comparison for greater than. + /// **See also:** Documentation for [std::isgreater](https://en.cppreference.com/w/cpp/numeric/math/isgreater). + /// \param x first operand + /// \param y second operand + /// \retval true if \a x greater than \a y + /// \retval false else + inline HALF_CONSTEXPR bool isgreater(half x, half y) + { + return ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) > ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)) && !isnan(x) && !isnan(y); + } + + /// Quiet comparison for greater equal. + /// **See also:** Documentation for [std::isgreaterequal](https://en.cppreference.com/w/cpp/numeric/math/isgreaterequal). + /// \param x first operand + /// \param y second operand + /// \retval true if \a x greater equal \a y + /// \retval false else + inline HALF_CONSTEXPR bool isgreaterequal(half x, half y) + { + return ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) >= ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)) && !isnan(x) && !isnan(y); + } + + /// Quiet comparison for less than. + /// **See also:** Documentation for [std::isless](https://en.cppreference.com/w/cpp/numeric/math/isless). + /// \param x first operand + /// \param y second operand + /// \retval true if \a x less than \a y + /// \retval false else + inline HALF_CONSTEXPR bool isless(half x, half y) + { + return ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) < ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)) && !isnan(x) && !isnan(y); + } + + /// Quiet comparison for less equal. + /// **See also:** Documentation for [std::islessequal](https://en.cppreference.com/w/cpp/numeric/math/islessequal). + /// \param x first operand + /// \param y second operand + /// \retval true if \a x less equal \a y + /// \retval false else + inline HALF_CONSTEXPR bool islessequal(half x, half y) + { + return ((x.data_^(0x8000|(0x8000-(x.data_>>15))))+(x.data_>>15)) <= ((y.data_^(0x8000|(0x8000-(y.data_>>15))))+(y.data_>>15)) && !isnan(x) && !isnan(y); + } + + /// Quiet comarison for less or greater. + /// **See also:** Documentation for [std::islessgreater](https://en.cppreference.com/w/cpp/numeric/math/islessgreater). + /// \param x first operand + /// \param y second operand + /// \retval true if either less or greater + /// \retval false else + inline HALF_CONSTEXPR bool islessgreater(half x, half y) + { + return x.data_!=y.data_ && ((x.data_|y.data_)&0x7FFF) && !isnan(x) && !isnan(y); + } + + /// Quiet check if unordered. + /// **See also:** Documentation for [std::isunordered](https://en.cppreference.com/w/cpp/numeric/math/isunordered). + /// \param x first operand + /// \param y second operand + /// \retval true if unordered (one or two NaN operands) + /// \retval false else + inline HALF_CONSTEXPR bool isunordered(half x, half y) { return isnan(x) || isnan(y); } + + /// \} + /// \anchor casting + /// \name Casting + /// \{ + + /// Cast to or from half-precision floating-point number. + /// This casts between [half](\ref half_float::half) and any built-in arithmetic type. The values are converted + /// directly using the default rounding mode, without any roundtrip over `float` that a `static_cast` would otherwise do. + /// + /// Using this cast with neither of the two types being a [half](\ref half_float::half) or with any of the two types + /// not being a built-in arithmetic type (apart from [half](\ref half_float::half), of course) results in a compiler + /// error and casting between [half](\ref half_float::half)s returns the argument unmodified. + /// \tparam T destination type (half or built-in arithmetic type) + /// \tparam U source type (half or built-in arithmetic type) + /// \param arg value to cast + /// \return \a arg converted to destination type + /// \exception FE_INVALID if \a T is integer type and result is not representable as \a T + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + template T half_cast(U arg) { return detail::half_caster::cast(arg); } + + /// Cast to or from half-precision floating-point number. + /// This casts between [half](\ref half_float::half) and any built-in arithmetic type. The values are converted + /// directly using the specified rounding mode, without any roundtrip over `float` that a `static_cast` would otherwise do. + /// + /// Using this cast with neither of the two types being a [half](\ref half_float::half) or with any of the two types + /// not being a built-in arithmetic type (apart from [half](\ref half_float::half), of course) results in a compiler + /// error and casting between [half](\ref half_float::half)s returns the argument unmodified. + /// \tparam T destination type (half or built-in arithmetic type) + /// \tparam R rounding mode to use. + /// \tparam U source type (half or built-in arithmetic type) + /// \param arg value to cast + /// \return \a arg converted to destination type + /// \exception FE_INVALID if \a T is integer type and result is not representable as \a T + /// \exception FE_OVERFLOW, ...UNDERFLOW, ...INEXACT according to rounding + template T half_cast(U arg) { return detail::half_caster::cast(arg); } + /// \} + + /// \} + /// \anchor errors + /// \name Error handling + /// \{ + + /// Clear exception flags. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// + /// **See also:** Documentation for [std::feclearexcept](https://en.cppreference.com/w/cpp/numeric/fenv/feclearexcept). + /// \param excepts OR of exceptions to clear + /// \retval 0 all selected flags cleared successfully + inline int feclearexcept(int excepts) { detail::errflags() &= ~excepts; return 0; } + + /// Test exception flags. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// + /// **See also:** Documentation for [std::fetestexcept](https://en.cppreference.com/w/cpp/numeric/fenv/fetestexcept). + /// \param excepts OR of exceptions to test + /// \return OR of selected exceptions if raised + inline int fetestexcept(int excepts) { return detail::errflags() & excepts; } + + /// Raise exception flags. + /// This raises the specified floating point exceptions and also invokes any additional automatic exception handling as + /// configured with the [HALF_ERRHANDLIG_...](\ref HALF_ERRHANDLING_ERRNO) preprocessor symbols. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// + /// **See also:** Documentation for [std::feraiseexcept](https://en.cppreference.com/w/cpp/numeric/fenv/feraiseexcept). + /// \param excepts OR of exceptions to raise + /// \retval 0 all selected exceptions raised successfully + inline int feraiseexcept(int excepts) { detail::errflags() |= excepts; detail::raise(excepts); return 0; } + + /// Save exception flags. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// + /// **See also:** Documentation for [std::fegetexceptflag](https://en.cppreference.com/w/cpp/numeric/fenv/feexceptflag). + /// \param flagp adress to store flag state at + /// \param excepts OR of flags to save + /// \retval 0 for success + inline int fegetexceptflag(int *flagp, int excepts) { *flagp = detail::errflags() & excepts; return 0; } + + /// Restore exception flags. + /// This only copies the specified exception state (including unset flags) without incurring any additional exception handling. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// + /// **See also:** Documentation for [std::fesetexceptflag](https://en.cppreference.com/w/cpp/numeric/fenv/feexceptflag). + /// \param flagp adress to take flag state from + /// \param excepts OR of flags to restore + /// \retval 0 for success + inline int fesetexceptflag(const int *flagp, int excepts) { detail::errflags() = (detail::errflags()|(*flagp&excepts)) & (*flagp|~excepts); return 0; } + + /// Throw C++ exceptions based on set exception flags. + /// This function manually throws a corresponding C++ exception if one of the specified flags is set, + /// no matter if automatic throwing (via [HALF_ERRHANDLING_THROW_...](\ref HALF_ERRHANDLING_THROW_INVALID)) is enabled or not. + /// This function works even if [automatic exception flag handling](\ref HALF_ERRHANDLING_FLAGS) is disabled, + /// but in that case manual flag management is the only way to raise flags. + /// \param excepts OR of exceptions to test + /// \param msg error message to use for exception description + /// \throw std::domain_error if `FE_INVALID` or `FE_DIVBYZERO` is selected and set + /// \throw std::overflow_error if `FE_OVERFLOW` is selected and set + /// \throw std::underflow_error if `FE_UNDERFLOW` is selected and set + /// \throw std::range_error if `FE_INEXACT` is selected and set + inline void fethrowexcept(int excepts, const char *msg = "") + { + excepts &= detail::errflags(); + if(excepts & (FE_INVALID|FE_DIVBYZERO)) + throw std::domain_error(msg); + if(excepts & FE_OVERFLOW) + throw std::overflow_error(msg); + if(excepts & FE_UNDERFLOW) + throw std::underflow_error(msg); + if(excepts & FE_INEXACT) + throw std::range_error(msg); + } + /// \} +} + + +#undef HALF_UNUSED_NOERR +#undef HALF_CONSTEXPR +#undef HALF_CONSTEXPR_CONST +#undef HALF_CONSTEXPR_NOERR +#undef HALF_NOEXCEPT +#undef HALF_NOTHROW +#undef HALF_THREAD_LOCAL +#undef HALF_TWOS_COMPLEMENT_INT +#ifdef HALF_POP_WARNINGS + #pragma warning(pop) + #undef HALF_POP_WARNINGS +#endif + +#endif diff --git a/src/main.cpp b/src/main.cpp index 3d796e1..c7b7430 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -43,8 +43,8 @@ int main(int argc, char* argv[]) } // convert unsigned char data in buffer to desired data type - //eatraw.convert_data(); eatraw.convert_data_16_bit_float(); + //eatraw.convert_data_32_bit_float(); // get array of encoded data std::vector maindata = eatraw.get_data(); @@ -67,7 +67,21 @@ int main(int argc, char* argv[]) std::cout< #include #include +#include #include #include #include #include +#include -#include "half_precision_floating_point.hpp" +// support for 16bit floats +#include +#include +//#include +#include "half.hpp" +//#include "half_precision_floating_point.hpp" #include "endian.hpp" //---------------------------------------------------------------------------// @@ -213,14 +220,14 @@ public: } // convert actual measurement data - void convert_data() + void convert_data_32_bit_float() { assert ( (datsize_-28)%4 == 0 && "length of buffer is not a multiple of 4" ); unsigned long int totnumfl = (datsize_-28)/(int)sizeof(float); for ( unsigned long int numfl = 0; numfl < totnumfl; numfl++ ) { - // assuming 4 byte float + // assuming 4 byte (32bit) float float num = 0.0; uint8_t* pnum = reinterpret_cast(&num); for ( int byi = 0; byi < (int)sizeof(float); byi++ ) @@ -238,39 +245,23 @@ public: // convert half-precision (16bit) floating point numbers void convert_data_16_bit_float() { - // single (32bit) floating point number - float fl = 0.0; + assert ( (datsize_-28)%2 == 0 && "length of buffer is not a multiple of 2" ); unsigned long int totnumby = (datsize_-28)/2; for ( unsigned long int by = 0; by < totnumby; by++ ) { - // retrieve two bytes of floating point number - std::vector pnum; - for ( int i = 0; i < 2; i++ ) pnum.push_back(datasec_["datas marker"][(unsigned long int)(28+by*2+i)]); + // declare single (16bit) floating point number + half_float::half hfl; - // obtain bitset - std::bitset<8> byA(pnum[0]), byB(pnum[1]); + // reinterpret bytes in buffer as memory of floating point number + uint8_t* pnum = reinterpret_cast(&hfl); + for ( int i = 0; i < (int)sizeof(half_float::half); i++ ) + { + pnum[i] = (int)datasec_["datas marker"][(unsigned long int)(28+by*sizeof(half_float::half)+i)]; + } - // TODO all following code only works for little endian!! - - // sign - float sign = byB[0]; - - // exponent of 16bit float - long int expo = 0; - for ( int i = 0; i < 5; i++ ) if ( byB[1+i] ) expo += pow(2.0,4-i); - expo -= 15; - - // convert to exponent of 32bit float - - - // mantissa - - - // declare bitset of float - std::bitset<8> flA(0x00), flB(0x00), flC(0x00), flD(0x00); - - + // add number to array + datmes_.push_back((double)hfl); } }