Changelog

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

1.6.0 - 2020-05-09

Added

  • Added LOG2_10 and LOG10_2 constants to both f16 and bf16, which were added to f32 and f64 in the standard library in 1.43.0. By @tspiteri.
  • Added to_le/be/ne_bytes and from_le/be/ne_bytes to both f16 and bf16, which were added to the standard library in 1.40.0. By @bzm3r.

1.5.0 - 2020-03-03

Added

  • Added the alloc feature to support the alloc crate in no_std environments. By @zserik. The vec module is now available with either alloc or std feature.

1.4.1 - 2020-02-10

Fixed

  • Added #[repr(transparent)] to f16/bf16 to remove undefined behavior. By @jfrimmel.

1.4.0 - 2019-10-13

Added

  • Added a bf16 type implementing the alternative bfloat16 16-bit floating point format. By @tspiteri.
  • f16::from_bits, f16::to_bits, f16::is_nan, f16::is_infinite, f16::is_finite, f16::is_sign_positive, and f16::is_sign_negative are now const fns.
  • slice::HalfBitsSliceExt and slice::HalfBitsSliceExt extension traits have been added for performing efficient reinterpret casts and conversions of slices to and from [f16] and [bf16]. These traits will use hardware SIMD conversion instructions when available and the use-intrinsics cargo feature is enabled.
  • vec::HalfBitsVecExt and vec::HalfFloatVecExt extension traits have been added for performing efficient reinterpret casts to and from Vec<f16> and Vec<bf16>. These traits are only available with the std cargo feature.
  • prelude has been added, for easy importing of most common functionality. Currently the prelude imports f16, bf16, and the new slice and vec extension traits.
  • New associated constants on f16 type to replace deprecated consts module.

Fixed

  • Software conversion (when not using use-intrinsics feature) now matches hardware rounding by rounding to nearest, ties to even. Fixes #24, by @tspiteri.
  • NaN value conversions now behave like f32 to f64 conversions, retaining sign. Fixes #23, by @tspiteri.

Changed

  • Minimum rustc version bumped to 1.32.
  • Runtime target host feature detection is now used if both std and use-intrinsics features are enabled and the compile target host does not support required features.
  • When use-intrinsics feature is enabled, will now always compile and run without error correctly regardless of compile target options.

Deprecated

  • consts module and all its constants have been deprecated; use the associated constants on f16 instead.
  • slice::from_bits has been deprecated; use slice::HalfBitsSliceExt::reinterpret_cast instead.
  • slice::from_bits_mut has been deprecated; use slice::HalfBitsSliceExt::reinterpret_cast_mut instead.
  • slice::to_bits has been deprecated; use slice::HalfFloatSliceExt::reinterpret_cast instead.
  • slice::to_bits_mut has been deprecated; use slice::HalfFloatSliceExt::reinterpret_cast_mut instead.
  • vec::from_bits has been deprecated; use vec::HalfBitsVecExt::reinterpret_into instead.
  • vec::to_bits has been deprecated; use vec::HalfFloatVecExt::reinterpret_into instead.

1.3.1 - 2019-10-04

Fixed

  • Corrected values of constants EPSILON, MAX_10_EXP, MAX_EXP, MIN_10_EXP, and MIN_EXP in consts module, as well as setting consts::NAN to match value of f32::NAN converted to f16. By @tspiteri.

1.3.0 - 2018-10-02

Added

  • slice::from_bits_mut and slice::to_bits_mut for conversion between mutable u16 and f16 slices. Fixes #16, by @johannesvollmer.

1.2.0 - 2018-09-03

Added

  • slice and optional vec (only included with std feature) modules for conversions between u16 and f16 buffers. Fixes #14, by @johannesvollmer.
  • to_bits added to replace as_bits. Fixes #12, by @tspiteri.

Fixed

  • serde optional dependency no longer uses its default std feature.

Deprecated

  • as_bits has been deprecated; use to_bits instead.
  • serialize cargo feature is deprecated; use serde instead.

1.1.2 - 2018-07-12

Fixed

  • Fixed compilation error in 1.1.1 on rustc < 1.27, now compiles again on rustc >= 1.10. Fixes #11.

1.1.1 - 2018-06-24 - Yanked

Yanked

Not recommended due to introducing compilation error on rustc versions prior to 1.27.

Fixed

  • Fix subnormal float conversions when use-intrinsics is not enabled. By @Moongoodboy-K.

1.1.0 - 2018-03-17

Added

  • Made to_f32 and to_f64 public. Fixes #7, by @PSeitz.

1.0.2 - 2018-01-12

Changed

  • Update behavior of is_sign_positive and is_sign_negative to match the IEEE754 conforming behavior of the standard library since Rust 1.20.0. Fixes #3, by @tspiteri.
  • Small optimization on is_nan and is_infinite from @tspiteri.

Fixed

  • Fix comparisons of +0 to -0 and comparisons involving negative numbers. Fixes #2, by @tspiteri.
  • Fix loss of sign when converting f16 and f32 to f16, and case where f64 NaN could be converted to f16 infinity instead of NaN. Fixes #5, by @tspiteri.

1.0.1 - 2017-08-30

Added

  • More README documentation.
  • Badges and categories in crate metadata.

Changed

  • serde dependency updated to 1.0 stable.
  • Writing changelog manually.

1.0.0 - 2017-02-03

Added

  • Update to serde 0.9 and stable Rust 1.15 for serialize feature.

0.1.1 - 2017-01-08

Added

  • Add serde support under new serialize feature.

Changed

  • Use no_std for crate by default.

0.1.0 - 2016-03-17

Added

  • Initial release of f16 type.