Release Notes											{#changelog}
=============

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.
