pub trait Float {
    type Payload: PrimInt + UpperHex + LowerHex;

    const EXPONENT_BIT: Self::Payload;
    const FRACTION_BIT: Self::Payload;
    const SIGN_POS: usize;
    const EXPONENT_POS: usize;
Show 63 methods // Required methods fn set_payload(&mut self, x: Self::Payload); fn from_bits(v: Self::Payload) -> Self; fn to_bits(&self) -> Self::Payload; fn bits(&self) -> Self::Payload; fn add<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self; fn sub<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self; fn mul<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self; fn fused_mul_add<T: Borrow<Self>>( &self, x: T, y: T, rnd: RoundingMode ) -> Self; fn div<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self; fn rem<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self; fn sqrt(&self, rnd: RoundingMode) -> Self; fn eq<T: Borrow<Self>>(&self, x: T) -> bool; fn lt<T: Borrow<Self>>(&self, x: T) -> bool; fn le<T: Borrow<Self>>(&self, x: T) -> bool; fn lt_quiet<T: Borrow<Self>>(&self, x: T) -> bool; fn le_quiet<T: Borrow<Self>>(&self, x: T) -> bool; fn eq_signaling<T: Borrow<Self>>(&self, x: T) -> bool; fn is_signaling_nan(&self) -> bool; fn from_u32(x: u32, rnd: RoundingMode) -> Self; fn from_u64(x: u64, rnd: RoundingMode) -> Self; fn from_i32(x: i32, rnd: RoundingMode) -> Self; fn from_i64(x: i64, rnd: RoundingMode) -> Self; fn to_u32(&self, rnd: RoundingMode, exact: bool) -> u32; fn to_u64(&self, rnd: RoundingMode, exact: bool) -> u64; fn to_i32(&self, rnd: RoundingMode, exact: bool) -> i32; fn to_i64(&self, rnd: RoundingMode, exact: bool) -> i64; fn to_f16(&self, rnd: RoundingMode) -> F16; fn to_bf16(&self, rnd: RoundingMode) -> BF16; fn to_f32(&self, rnd: RoundingMode) -> F32; fn to_f64(&self, rnd: RoundingMode) -> F64; fn to_f128(&self, rnd: RoundingMode) -> F128; fn round_to_integral(&self, rnd: RoundingMode) -> Self; // Provided methods fn compare<T: Borrow<Self>>(&self, x: T) -> Option<Ordering> { ... } fn from_u8(x: u8, rnd: RoundingMode) -> Self where Self: Sized { ... } fn from_u16(x: u16, rnd: RoundingMode) -> Self where Self: Sized { ... } fn from_i8(x: i8, rnd: RoundingMode) -> Self where Self: Sized { ... } fn from_i16(x: i16, rnd: RoundingMode) -> Self where Self: Sized { ... } fn neg(&self) -> Self where Self: Sized { ... } fn abs(&self) -> Self where Self: Sized { ... } fn sign(&self) -> Self::Payload { ... } fn exponent(&self) -> Self::Payload { ... } fn fraction(&self) -> Self::Payload { ... } fn is_positive(&self) -> bool { ... } fn is_positive_zero(&self) -> bool { ... } fn is_positive_subnormal(&self) -> bool { ... } fn is_positive_normal(&self) -> bool { ... } fn is_positive_infinity(&self) -> bool { ... } fn is_negative(&self) -> bool { ... } fn is_negative_zero(&self) -> bool { ... } fn is_negative_subnormal(&self) -> bool { ... } fn is_negative_normal(&self) -> bool { ... } fn is_negative_infinity(&self) -> bool { ... } fn is_nan(&self) -> bool { ... } fn is_zero(&self) -> bool { ... } fn is_subnormal(&self) -> bool { ... } fn set_sign(&mut self, x: Self::Payload) { ... } fn set_exponent(&mut self, x: Self::Payload) { ... } fn set_fraction(&mut self, x: Self::Payload) { ... } fn positive_infinity() -> Self where Self: Sized { ... } fn positive_zero() -> Self where Self: Sized { ... } fn negative_infinity() -> Self where Self: Sized { ... } fn negative_zero() -> Self where Self: Sized { ... } fn quiet_nan() -> Self where Self: Sized { ... }
}
Expand description

arbitrary floting-point type

Examples

Float can be used for generic functions.

use softfloat_wrapper::{Float, RoundingMode, F16, F32};

fn rsqrt<T: Float>(x: T) -> T {
    let ret = x.sqrt(RoundingMode::TiesToEven);
    let one = T::from_u8(1, RoundingMode::TiesToEven);
    one.div(ret, RoundingMode::TiesToEven)
}

let a = F16::from_bits(0x1234);
let a = rsqrt(a);
let a = F32::from_bits(0x12345678);
let a = rsqrt(a);

Required Associated Types§

Required Associated Constants§

Required Methods§

source

fn set_payload(&mut self, x: Self::Payload)

source

fn from_bits(v: Self::Payload) -> Self

source

fn to_bits(&self) -> Self::Payload

source

fn bits(&self) -> Self::Payload

👎Deprecated since 0.3.0: Please use to_bits instead
source

fn add<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self

source

fn sub<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self

source

fn mul<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self

source

fn fused_mul_add<T: Borrow<Self>>(&self, x: T, y: T, rnd: RoundingMode) -> Self

source

fn div<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self

source

fn rem<T: Borrow<Self>>(&self, x: T, rnd: RoundingMode) -> Self

source

fn sqrt(&self, rnd: RoundingMode) -> Self

source

fn eq<T: Borrow<Self>>(&self, x: T) -> bool

source

fn lt<T: Borrow<Self>>(&self, x: T) -> bool

source

fn le<T: Borrow<Self>>(&self, x: T) -> bool

source

fn lt_quiet<T: Borrow<Self>>(&self, x: T) -> bool

source

fn le_quiet<T: Borrow<Self>>(&self, x: T) -> bool

source

fn eq_signaling<T: Borrow<Self>>(&self, x: T) -> bool

source

fn is_signaling_nan(&self) -> bool

source

fn from_u32(x: u32, rnd: RoundingMode) -> Self

source

fn from_u64(x: u64, rnd: RoundingMode) -> Self

source

fn from_i32(x: i32, rnd: RoundingMode) -> Self

source

fn from_i64(x: i64, rnd: RoundingMode) -> Self

source

fn to_u32(&self, rnd: RoundingMode, exact: bool) -> u32

source

fn to_u64(&self, rnd: RoundingMode, exact: bool) -> u64

source

fn to_i32(&self, rnd: RoundingMode, exact: bool) -> i32

source

fn to_i64(&self, rnd: RoundingMode, exact: bool) -> i64

source

fn to_f16(&self, rnd: RoundingMode) -> F16

source

fn to_bf16(&self, rnd: RoundingMode) -> BF16

source

fn to_f32(&self, rnd: RoundingMode) -> F32

source

fn to_f64(&self, rnd: RoundingMode) -> F64

source

fn to_f128(&self, rnd: RoundingMode) -> F128

source

fn round_to_integral(&self, rnd: RoundingMode) -> Self

Provided Methods§

source

fn compare<T: Borrow<Self>>(&self, x: T) -> Option<Ordering>

source

fn from_u8(x: u8, rnd: RoundingMode) -> Selfwhere Self: Sized,

source

fn from_u16(x: u16, rnd: RoundingMode) -> Selfwhere Self: Sized,

source

fn from_i8(x: i8, rnd: RoundingMode) -> Selfwhere Self: Sized,

source

fn from_i16(x: i16, rnd: RoundingMode) -> Selfwhere Self: Sized,

source

fn neg(&self) -> Selfwhere Self: Sized,

source

fn abs(&self) -> Selfwhere Self: Sized,

source

fn sign(&self) -> Self::Payload

source

fn exponent(&self) -> Self::Payload

source

fn fraction(&self) -> Self::Payload

source

fn is_positive(&self) -> bool

source

fn is_positive_zero(&self) -> bool

source

fn is_positive_subnormal(&self) -> bool

source

fn is_positive_normal(&self) -> bool

source

fn is_positive_infinity(&self) -> bool

source

fn is_negative(&self) -> bool

source

fn is_negative_zero(&self) -> bool

source

fn is_negative_subnormal(&self) -> bool

source

fn is_negative_normal(&self) -> bool

source

fn is_negative_infinity(&self) -> bool

source

fn is_nan(&self) -> bool

source

fn is_zero(&self) -> bool

source

fn is_subnormal(&self) -> bool

source

fn set_sign(&mut self, x: Self::Payload)

source

fn set_exponent(&mut self, x: Self::Payload)

source

fn set_fraction(&mut self, x: Self::Payload)

source

fn positive_infinity() -> Selfwhere Self: Sized,

source

fn positive_zero() -> Selfwhere Self: Sized,

source

fn negative_infinity() -> Selfwhere Self: Sized,

source

fn negative_zero() -> Selfwhere Self: Sized,

source

fn quiet_nan() -> Selfwhere Self: Sized,

Implementors§

source§

impl Float for BF16

§

type Payload = u16

source§

const EXPONENT_BIT: Self::Payload = {transmute(0x00ff): <bf16::BF16 as Float>::Payload}

source§

const FRACTION_BIT: Self::Payload = {transmute(0x007f): <bf16::BF16 as Float>::Payload}

source§

const SIGN_POS: usize = 15usize

source§

const EXPONENT_POS: usize = 7usize

source§

impl Float for F16

§

type Payload = u16

source§

const EXPONENT_BIT: Self::Payload = {transmute(0x001f): <f16::F16 as Float>::Payload}

source§

const FRACTION_BIT: Self::Payload = {transmute(0x03ff): <f16::F16 as Float>::Payload}

source§

const SIGN_POS: usize = 15usize

source§

const EXPONENT_POS: usize = 10usize

source§

impl Float for F32

§

type Payload = u32

source§

const EXPONENT_BIT: Self::Payload = {transmute(0x000000ff): <f32::F32 as Float>::Payload}

source§

const FRACTION_BIT: Self::Payload = {transmute(0x007fffff): <f32::F32 as Float>::Payload}

source§

const SIGN_POS: usize = 31usize

source§

const EXPONENT_POS: usize = 23usize

source§

impl Float for F64

§

type Payload = u64

source§

const EXPONENT_BIT: Self::Payload = {transmute(0x00000000000007ff): <f64::F64 as Float>::Payload}

source§

const FRACTION_BIT: Self::Payload = {transmute(0x000fffffffffffff): <f64::F64 as Float>::Payload}

source§

const SIGN_POS: usize = 63usize

source§

const EXPONENT_POS: usize = 52usize

source§

impl Float for F128

§

type Payload = u128

source§

const EXPONENT_BIT: Self::Payload = {transmute(0x00000000000000000000000000007fff): <f128::F128 as Float>::Payload}

source§

const FRACTION_BIT: Self::Payload = {transmute(0x0000ffffffffffffffffffffffffffff): <f128::F128 as Float>::Payload}

source§

const SIGN_POS: usize = 127usize

source§

const EXPONENT_POS: usize = 112usize