Release Notes
=============

2.2.1 release (2025-03-02):
---------------------------

- Fixed error when converting minimum negative integer value to half.
- Added more type conversions to remove warnings on some 64-bit platforms.
- Removed potential naming conflicts of internal functions with C standard 
  library functions.


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.
