[][src]Trait softfloat_wrapper::Float

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

    pub const EXPONENT_BIT: Self::Payload;
    pub const FRACTION_BIT: Self::Payload;
    pub const SIGN_POS: usize;
    pub const EXPONENT_POS: usize;

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

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);

Associated Types

Loading content...

Associated Constants

pub const EXPONENT_BIT: Self::Payload[src]

pub const FRACTION_BIT: Self::Payload[src]

pub const SIGN_POS: usize[src]

pub const EXPONENT_POS: usize[src]

Loading content...

Required methods

pub fn set_payload(&mut self, x: Self::Payload)[src]

pub fn from_bits(v: Self::Payload) -> Self[src]

pub fn to_bits(&self) -> Self::Payload[src]

pub fn bits(&self) -> Self::Payload[src]

👎 Deprecated since 0.3.0:

Please use to_bits instead

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

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

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

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

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

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

pub fn sqrt(&self, rnd: RoundingMode) -> Self[src]

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

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

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

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

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

pub fn from_u32(x: u32, rnd: RoundingMode) -> Self[src]

pub fn from_u64(x: u64, rnd: RoundingMode) -> Self[src]

pub fn from_i32(x: i32, rnd: RoundingMode) -> Self[src]

pub fn from_i64(x: i64, rnd: RoundingMode) -> Self[src]

pub fn to_u32(&self, rnd: RoundingMode, exact: bool) -> u32[src]

pub fn to_u64(&self, rnd: RoundingMode, exact: bool) -> u64[src]

pub fn to_i32(&self, rnd: RoundingMode, exact: bool) -> i32[src]

pub fn to_i64(&self, rnd: RoundingMode, exact: bool) -> i64[src]

pub fn to_f16(&self, rnd: RoundingMode) -> F16[src]

pub fn to_f32(&self, rnd: RoundingMode) -> F32[src]

pub fn to_f64(&self, rnd: RoundingMode) -> F64[src]

pub fn to_f128(&self, rnd: RoundingMode) -> F128[src]

pub fn round_to_integral(&self, rnd: RoundingMode) -> Self[src]

Loading content...

Provided methods

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

pub fn from_u8(x: u8, rnd: RoundingMode) -> Self where
    Self: Sized
[src]

pub fn from_u16(x: u16, rnd: RoundingMode) -> Self where
    Self: Sized
[src]

pub fn from_i8(x: i8, rnd: RoundingMode) -> Self where
    Self: Sized
[src]

pub fn from_i16(x: i16, rnd: RoundingMode) -> Self where
    Self: Sized
[src]

pub fn neg(&self) -> Self where
    Self: Sized
[src]

pub fn abs(&self) -> Self where
    Self: Sized
[src]

pub fn sign(&self) -> Self::Payload[src]

pub fn exponent(&self) -> Self::Payload[src]

pub fn fraction(&self) -> Self::Payload[src]

pub fn is_positive(&self) -> bool[src]

pub fn is_positive_zero(&self) -> bool[src]

pub fn is_positive_subnormal(&self) -> bool[src]

pub fn is_positive_normal(&self) -> bool[src]

pub fn is_positive_infinity(&self) -> bool[src]

pub fn is_negative(&self) -> bool[src]

pub fn is_negative_zero(&self) -> bool[src]

pub fn is_negative_subnormal(&self) -> bool[src]

pub fn is_negative_normal(&self) -> bool[src]

pub fn is_negative_infinity(&self) -> bool[src]

pub fn is_nan(&self) -> bool[src]

pub fn is_zero(&self) -> bool[src]

pub fn is_subnormal(&self) -> bool[src]

pub fn set_sign(&mut self, x: Self::Payload)[src]

pub fn set_exponent(&mut self, x: Self::Payload)[src]

pub fn set_fraction(&mut self, x: Self::Payload)[src]

pub fn positive_infinity() -> Self where
    Self: Sized
[src]

pub fn positive_zero() -> Self where
    Self: Sized
[src]

pub fn negative_infinity() -> Self where
    Self: Sized
[src]

pub fn negative_zero() -> Self where
    Self: Sized
[src]

pub fn quiet_nan() -> Self where
    Self: Sized
[src]

Loading content...

Implementors

impl Float for F16[src]

type Payload = u16

impl Float for F32[src]

type Payload = u32

impl Float for F64[src]

type Payload = u64

impl Float for F128[src]

type Payload = u128

Loading content...