half  2.2
IEEE 754-based half-precision floating-point library
Release Notes

2.2.0 release (2021-06-12):

  • Added rsqrt function for inverse square root.
  • Improved performance of pow function.
  • Fixed bug that forgot to include <immintrin.h> for F16C intrinsics.

2.1.0 release (2019-08-05):

  • Added detection of IEEE floating-point exceptions to operators and functions.
  • Added configuration options for automatic exception handling.
  • Added functions for explicitly managing floating-point exception flags.
  • Improved accuracy of pow and atan2 functions.

2.0.0 release (2019-07-23):

  • Made internal implementation independent from built-in floating point facilities for increased reliability and IEEE-conformance.
  • Changed default rounding mode to rounding to nearest.
  • Always round ties to even when rounding to nearest.
  • Extended constexpr support to comparison and classification functions.
  • Added support for F16C compiler intrinsics for conversions.
  • Enabled C++11 feature detection for Intel compilers.

1.12.0 release (2017-03-06):

  • Changed behaviour of half_cast to perform conversions to/from double and long double directly according to specified rounding mode, without an intermediate float conversion.
  • Added noexcept specifiers to constructors.
  • Fixed minor portability problem with logb and ilogb.
  • Tested for VC++ 2015.

1.11.0 release (2013-11-16):

  • Made tie-breaking behaviour in round to nearest configurable by HALF_ROUND_TIES_TO_EVEN macro.
  • Completed support for all C++11 mathematical functions even if single- precision versions from <cmath> are unsupported.
  • Fixed inability to disable support for C++11 mathematical functions on VC++ 2013.

1.10.0 release (2013-11-09):

  • Made default rounding mode configurable by HALF_ROUND_STYLE macro.
  • Added support for non-IEEE single-precision implementations.
  • Added HALF_ENABLE_CPP11_TYPE_TRAITS preprocessor flag for checking support for C++11 type traits and TMP features.
  • Restricted half_cast to support built-in arithmetic types only.
  • Changed behaviour of half_cast to respect rounding mode when casting to/from integer types.

1.9.2 release (2013-11-01):

  • Tested for gcc 4.8.
  • Tested and fixed for VC++ 2013.
  • Removed unnecessary warnings in MSVC.

1.9.1 release (2013-08-08):

  • Fixed problems with older gcc and MSVC versions.
  • Small fix to non-C++11 implementations of remainder and remquo.

1.9.0 release (2013-08-07):

  • Changed behaviour of nearbyint, rint, lrint and llrint to use rounding mode of half-precision implementation (which is truncating/indeterminate) instead of single-precision rounding mode.
  • Added support for more C++11 mathematical functions even if single- precision versions from <cmath> are unsupported, in particular remainder, remquo and cbrt.
  • Minor implementation changes.

1.8.1 release (2013-01-22):

  • Fixed bug resulting in multiple definitions of the nanh function due to a missing inline specification.

1.8.0 release (2013-01-19):

  • Added support for more C++11 mathematical functions even if single- precision versions from <cmath> are unsupported, in particular exponential and logarithm functions, hyperbolic area functions and the hypotenuse function.
  • Made fma function use default implementation if single-precision version from <cmath> is not faster and thus FP_FAST_FMAH to be defined always.
  • Fixed overload resolution issues when invoking certain mathematical functions by unqualified calls.

1.7.0 release (2012-10-26):

  • Added support for C++11 noexcept specifiers.
  • Changed C++11 long long to be supported on VC++ 2003 and up.

1.6.1 release (2012-09-13):

  • Made fma and fdim functions available even if corresponding single-precision functions are not.

1.6.0 release (2012-09-12):

  • Added HALF_ENABLE_CPP11_LONG_LONG to control support for long long integers and corresponding mathematical functions.
  • Fixed C++98 compatibility on non-VC compilers.

1.5.1 release (2012-08-17):

  • Recorrected std::numeric_limits::round_style to always return std::round_indeterminate, due to overflow-handling deviating from correct round-toward-zero behaviour.

1.5.0 release (2012-08-16):

  • Added half_cast for explicitly casting between half and any type convertible to/from float and allowing the explicit specification of the rounding mode to use.

1.4.0 release (2012-08-12):

  • Added support for C++11 generalized constant expressions (constexpr).

1.3.1 release (2012-08-11):

  • Fixed requirement for std::signbit and std::isnan (even if C++11 <cmath> functions disabled) on non-VC compilers.

1.3.0 release (2012-08-10):

  • Made requirement for <cstdint> and static_assert optional and thus made the library C++98-compatible.
  • Made support for C++11 features user-overridable through explicit definition of corresponding preprocessor symbols to either 0 or 1.
  • Renamed HALF_ENABLE_HASH to HALF_ENABLE_CPP11_HASH in correspondence with other C++11 preprocessor symbols.

1.2.0 release (2012-08-07):

  • Added proper preprocessor definitions for HUGE_VALH and FP_FAST_FMAH in correspondence with their single-precision counterparts from <cmath>.
  • Fixed internal preprocessor macros to be properly undefined after use.

1.1.2 release (2012-08-07):

  • Revised std::numeric_limits::round_style to return std::round_toward_zero if the float version also does and std::round_indeterminate otherwise.
  • Fixed std::numeric_limits::round_error to reflect worst-case round toward zero behaviour.

1.1.1 release (2012-08-06):

  • Fixed std::numeric_limits::min to return smallest positive normal number, instead of subnormal number.
  • Fixed std::numeric_limits::round_style to return std::round_indeterminate due to mixture of separately rounded single-precision arithmetics with truncating single-to-half conversions.

1.1.0 release (2012-08-06):

  • Added half-precision literals.

1.0.0 release (2012-08-05):

  • First release.