The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
serialize_as_f32 and serialize_as_string functions when serde cargo feature is enabled. They allowing customizing the serialization by using #[serde(serialize_with="f16::serialize_as_f32")] attribute in serde derive macros. Closes #60.f32, f64, and string values in addition to its previous default deserialization. Closes #60.#[inline] on fallback functions, which improved conversion execution on non-nightly rust by up to 50%. By @Shnatsel.spirv. Some traits and functions are unavailble on this architecture. By @charles-r-earp.total_cmp method to both float types. Closes #55, by @joseluis.std is now enabled as a default cargo feature. Disable default features to continue using no_std support.#[must_use] attributes to functions, as appropriate.slice::as_ptr not correctly using mutable reference. By @Nilstrieb.const conversion methods to both f16 and bf16. These methods never use hardware intrinsics, unlike the current conversion methods, which is why they are separated into new methods. The following const methods were added:from_f32_constfrom_f64_constto_f32_constto_f64_constNeg trait support for borrowed values &f16 and &bf16. By @pthariensflame.AsPrimitive implementations from and to self, usize, and isize. By @kali.serialize cargo feature has been removed. Use serde cargo feature instead.consts module has been removed. Use associated constants on f16 instead.f16::as_bitsslice::from_bits_mutslice::to_bits_mutslice::from_bitsslice::to_bitsvec::from_bitsvec::to_bitsNot recommended due to introducing compilation error in Rust versions that worked with 1.8.0.
std feature on optional dependencies.std feature is not enabled and num-traits is enabled under new resolver. Now properly uses libm num-traits feature.Add, Div, Mul, Neg, Rem, and Sub traits. Previously, these were only implemented under the num-traits feature. Keep in mind they still convert to f32 and back in the implementation.f16 and bf16 are now const:to_le_bytesto_be_bytesto_ne_bytesfrom_le_bytesfrom_be_bytesfrom_ne_bytesis_normalclassifysignumzerocopy traits AsBytes and FromBytes under zerocopy cargo feature. By @samcrow.core::iter::Product and core::iter::Sum traits, with the same caveat as above about converting to f32 and back under the hood.NEG_ONE to both f16 and bf16.f16 and bf16:copysignmaxminclampbytemuck and num-traits optional features.bytemuck traits Zeroable and Pod under bytemuck cargo feature. By @charles-r-earp.num-traits traits ToPrimitive and FromPrimitive under num-traits cargo feature. By @charles-r-earp.Binary, Octal, LowerHex, and UpperHex string format traits to format raw f16/bf16 bytes to string.Debug trait implementation now formats f16/bf16 as float instead of raw bytes hex. Use newly implemented formatting traits to format in hex instead of Debug. Fixes #37.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.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.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.#[repr(transparent)] to f16/bf16 to remove undefined behavior. By @jfrimmel.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.f16 type to replace deprecated consts module.use-intrinsics feature) now matches hardware rounding by rounding to nearest, ties to even. Fixes #24, by @tspiteri.f32 to f64 conversions, retaining sign. Fixes #23, by @tspiteri.std and use-intrinsics features are enabled and the compile target host does not support required features.use-intrinsics feature is enabled, will now always compile and run without error correctly regardless of compile target options.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.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.slice::from_bits_mut and slice::to_bits_mut for conversion between mutable u16 and f16 slices. Fixes #16, by @johannesvollmer.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.serde optional dependency no longer uses its default std feature.as_bits has been deprecated; use to_bits instead.serialize cargo feature is deprecated; use serde instead.Not recommended due to introducing compilation error on rustc versions prior to 1.27.
use-intrinsics is not enabled. By @Moongoodboy-K.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.is_nan and is_infinite from @tspiteri.f16 and f32 to f16, and case where f64 NaN could be converted to f16 infinity instead of NaN. Fixes #5, by @tspiteri.serde dependency updated to 1.0 stable.serde 0.9 and stable Rust 1.15 for serialize feature.serde support under new serialize feature.no_std for crate by default.f16 type.