[−][src]Struct half::bf16
A 16-bit floating point type implementing the bfloat16
format.
The bfloat16
floating point format is a truncated 16-bit version of the IEEE 754 standard
binary32
, a.k.a f32
. bf16
has approximately the same dynamic range as f32
by having
a lower precision than f16
. While f16
has a precision of 11 bits, bf16
has a
precision of only 8 bits.
Like f16
, bf16
does not offer arithmetic operations as it is intended for compact
storage rather than calculations. Operations should be performed with f32
or higher-precision
types and converted to/from bf16
as necessary.
Implementations
impl bf16
[src]
pub const fn from_bits(bits: u16) -> bf16
[src]
Constructs a bf16
value from the raw bits.
pub fn from_f32(value: f32) -> bf16
[src]
Constructs a bf16
value from a 32-bit floating point value.
If the 32-bit value is too large to fit, ±∞ will result. NaN values are preserved. Subnormal values that are too tiny to be represented will result in ±0. All other values are truncated and rounded to the nearest representable value.
pub fn from_f64(value: f64) -> bf16
[src]
Constructs a bf16
value from a 64-bit floating point value.
If the 64-bit value is to large to fit, ±∞ will result. NaN values are preserved. 64-bit subnormal values are too tiny to be represented and result in ±0. Exponents that underflow the minimum exponent will result in subnormals or ±0. All other values are truncated and rounded to the nearest representable value.
pub const fn to_bits(self) -> u16
[src]
Converts a bf16
into the underlying bit representation.
pub fn to_le_bytes(self) -> [u8; 2]
[src]
Return the memory representation of the underlying bit representation as a byte array in little-endian byte order.
Examples
let bytes = bf16::from_f32(12.5).to_le_bytes(); assert_eq!(bytes, [0x48, 0x41]);
pub fn to_be_bytes(self) -> [u8; 2]
[src]
Return the memory representation of the underlying bit representation as a byte array in big-endian (network) byte order.
Examples
let bytes = bf16::from_f32(12.5).to_be_bytes(); assert_eq!(bytes, [0x41, 0x48]);
pub fn to_ne_bytes(self) -> [u8; 2]
[src]
Return the memory representation of the underlying bit representation as a byte array in native byte order.
As the target platform's native endianness is used, portable code should use to_be_bytes
or to_le_bytes
, as appropriate, instead.
Examples
let bytes = bf16::from_f32(12.5).to_ne_bytes(); assert_eq!(bytes, if cfg!(target_endian = "big") { [0x41, 0x48] } else { [0x48, 0x41] });
pub fn from_le_bytes(bytes: [u8; 2]) -> bf16
[src]
Create a floating point value from its representation as a byte array in little endian.
Examples
let value = bf16::from_le_bytes([0x48, 0x41]); assert_eq!(value, bf16::from_f32(12.5));
pub fn from_be_bytes(bytes: [u8; 2]) -> bf16
[src]
Create a floating point value from its representation as a byte array in big endian.
Examples
let value = bf16::from_be_bytes([0x41, 0x48]); assert_eq!(value, bf16::from_f32(12.5));
pub fn from_ne_bytes(bytes: [u8; 2]) -> bf16
[src]
Create a floating point value from its representation as a byte array in native endian.
As the target platform's native endianness is used, portable code likely wants to use
from_be_bytes
or from_le_bytes
, as appropriate instead.
Examples
let value = bf16::from_ne_bytes(if cfg!(target_endian = "big") { [0x41, 0x48] } else { [0x48, 0x41] }); assert_eq!(value, bf16::from_f32(12.5));
pub fn to_f32(self) -> f32
[src]
Converts a bf16
value into an f32
value.
This conversion is lossless as all values can be represented exactly in f32
.
pub fn to_f64(self) -> f64
[src]
Converts a bf16
value into an f64
value.
This conversion is lossless as all values can be represented exactly in f64
.
pub const fn is_nan(self) -> bool
[src]
Returns true
if this value is NaN and false
otherwise.
Examples
let nan = bf16::NAN; let f = bf16::from_f32(7.0_f32); assert!(nan.is_nan()); assert!(!f.is_nan());
pub const fn is_infinite(self) -> bool
[src]
Returns true
if this value is ±∞ and false
otherwise.
Examples
let f = bf16::from_f32(7.0f32); let inf = bf16::INFINITY; let neg_inf = bf16::NEG_INFINITY; let nan = bf16::NAN; assert!(!f.is_infinite()); assert!(!nan.is_infinite()); assert!(inf.is_infinite()); assert!(neg_inf.is_infinite());
pub const fn is_finite(self) -> bool
[src]
Returns true
if this number is neither infinite nor NaN.
Examples
let f = bf16::from_f32(7.0f32); let inf = bf16::INFINITY; let neg_inf = bf16::NEG_INFINITY; let nan = bf16::NAN; assert!(f.is_finite()); assert!(!nan.is_finite()); assert!(!inf.is_finite()); assert!(!neg_inf.is_finite());
pub fn is_normal(self) -> bool
[src]
Returns true
if the number is neither zero, infinite, subnormal, or NaN.
Examples
let min = bf16::MIN_POSITIVE; let max = bf16::MAX; let lower_than_min = bf16::from_f32(1.0e-39_f32); let zero = bf16::from_f32(0.0_f32); assert!(min.is_normal()); assert!(max.is_normal()); assert!(!zero.is_normal()); assert!(!bf16::NAN.is_normal()); assert!(!bf16::INFINITY.is_normal()); // Values between 0 and `min` are subnormal. assert!(!lower_than_min.is_normal());
pub fn classify(self) -> FpCategory
[src]
Returns the floating point category of the number.
If only one property is going to be tested, it is generally faster to use the specific predicate instead.
Examples
use std::num::FpCategory; let num = bf16::from_f32(12.4_f32); let inf = bf16::INFINITY; assert_eq!(num.classify(), FpCategory::Normal); assert_eq!(inf.classify(), FpCategory::Infinite);
pub fn signum(self) -> bf16
[src]
Returns a number that represents the sign of self
.
- 1.0 if the number is positive, +0.0 or
INFINITY
- −1.0 if the number is negative, −0.0
or
NEG_INFINITY` - NaN if the number is NaN
Examples
let f = bf16::from_f32(3.5_f32); assert_eq!(f.signum(), bf16::from_f32(1.0)); assert_eq!(bf16::NEG_INFINITY.signum(), bf16::from_f32(-1.0)); assert!(bf16::NAN.signum().is_nan());
pub const fn is_sign_positive(self) -> bool
[src]
Returns true
if and only if self
has a positive sign, including +0.0, NaNs with a
positive sign bit and +∞.
Examples
let nan = bf16::NAN; let f = bf16::from_f32(7.0_f32); let g = bf16::from_f32(-7.0_f32); assert!(f.is_sign_positive()); assert!(!g.is_sign_positive()); // NaN can be either positive or negative assert!(nan.is_sign_positive() != nan.is_sign_negative());
pub const fn is_sign_negative(self) -> bool
[src]
Returns true
if and only if self
has a negative sign, including −0.0, NaNs with a
negative sign bit and −∞.
Examples
let nan = bf16::NAN; let f = bf16::from_f32(7.0f32); let g = bf16::from_f32(-7.0f32); assert!(!f.is_sign_negative()); assert!(g.is_sign_negative()); // NaN can be either positive or negative assert!(nan.is_sign_positive() != nan.is_sign_negative());
pub const DIGITS: u32
[src]
Approximate number of bf16
significant digits in base 10.
pub const EPSILON: bf16
[src]
bf16
machine epsilon value.
This is the difference between 1.0 and the next largest representable number.
pub const INFINITY: bf16
[src]
bf16
positive Infinity (+∞).
pub const MANTISSA_DIGITS: u32
[src]
Number of bf16
significant digits in base 2.
pub const MAX: bf16
[src]
Largest finite bf16
value.
pub const MAX_10_EXP: i32
[src]
Maximum possible bf16
power of 10 exponent.
pub const MAX_EXP: i32
[src]
Maximum possible bf16
power of 2 exponent.
pub const MIN: bf16
[src]
Smallest finite bf16
value.
pub const MIN_10_EXP: i32
[src]
Minimum possible normal bf16
power of 10 exponent.
pub const MIN_EXP: i32
[src]
One greater than the minimum possible normal bf16
power of 2 exponent.
pub const MIN_POSITIVE: bf16
[src]
Smallest positive normal bf16
value.
pub const NAN: bf16
[src]
bf16
Not a Number (NaN).
pub const NEG_INFINITY: bf16
[src]
bf16
negative infinity (-∞).
pub const RADIX: u32
[src]
The radix or base of the internal representation of bf16
.
pub const MIN_POSITIVE_SUBNORMAL: bf16
[src]
Minimum positive subnormal bf16
value.
pub const MAX_SUBNORMAL: bf16
[src]
Maximum subnormal bf16
value.
pub const ONE: bf16
[src]
bf16
1
pub const ZERO: bf16
[src]
bf16
0
pub const NEG_ZERO: bf16
[src]
bf16
-0
pub const E: bf16
[src]
bf16
Euler's number (ℯ).
pub const PI: bf16
[src]
bf16
Archimedes' constant (π).
pub const FRAC_1_PI: bf16
[src]
bf16
1/π
pub const FRAC_1_SQRT_2: bf16
[src]
bf16
1/√2
pub const FRAC_2_PI: bf16
[src]
bf16
2/π
pub const FRAC_2_SQRT_PI: bf16
[src]
bf16
2/√π
pub const FRAC_PI_2: bf16
[src]
bf16
π/2
pub const FRAC_PI_3: bf16
[src]
bf16
π/3
pub const FRAC_PI_4: bf16
[src]
bf16
π/4
pub const FRAC_PI_6: bf16
[src]
bf16
π/6
pub const FRAC_PI_8: bf16
[src]
bf16
π/8
pub const LN_10: bf16
[src]
bf16
𝗅𝗇 10
pub const LN_2: bf16
[src]
bf16
𝗅𝗇 2
pub const LOG10_E: bf16
[src]
bf16
𝗅𝗈𝗀₁₀ℯ
pub const LOG10_2: bf16
[src]
bf16
𝗅𝗈𝗀₁₀2
pub const LOG2_E: bf16
[src]
bf16
𝗅𝗈𝗀₂ℯ
pub const LOG2_10: bf16
[src]
bf16
𝗅𝗈𝗀₂10
pub const SQRT_2: bf16
[src]
bf16
√2
Trait Implementations
impl Clone for bf16
[src]
fn clone(&self) -> bf16
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Copy for bf16
[src]
impl Debug for bf16
[src]
impl Default for bf16
[src]
impl Display for bf16
[src]
impl From<bf16> for f32
[src]
impl From<bf16> for f64
[src]
impl From<i8> for bf16
[src]
impl From<u8> for bf16
[src]
impl FromStr for bf16
[src]
type Err = ParseFloatError
The associated error which can be returned from parsing.
fn from_str(src: &str) -> Result<bf16, ParseFloatError>
[src]
impl LowerExp for bf16
[src]
impl PartialEq<bf16> for bf16
[src]
impl PartialOrd<bf16> for bf16
[src]
fn partial_cmp(&self, other: &bf16) -> Option<Ordering>
[src]
fn lt(&self, other: &bf16) -> bool
[src]
fn le(&self, other: &bf16) -> bool
[src]
fn gt(&self, other: &bf16) -> bool
[src]
fn ge(&self, other: &bf16) -> bool
[src]
impl UpperExp for bf16
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,