safeeft 0.0.3

Safe and branchless error-free transformation algorithms for floating point numbers.
Documentation
extern crate num_traits;
use core::ops::{Neg, Add, Sub, Mul, Div};
use core::cmp::PartialOrd;
use core::marker::Sized;
use self::num_traits::Float;

pub trait FloatEFT
    : Neg<Output = Self> + Add<Self, Output = Self> + Sub<Self, Output = Self> +
    Mul<Self, Output = Self> + Div<Self, Output = Self> +
    PartialOrd + Clone + Sized {
        fn abs(&self) -> Self;
        fn split_coef() -> Self;
        fn epsilon() -> Self;
        fn min_pos() -> Self;
        fn one() -> Self;
        fn base() -> Self;
}

impl<T: Float> FloatEFT for T {
    #[inline]
    fn abs(&self) -> Self {
        self.clone().abs()
    }
    #[inline]
    fn split_coef() -> Self {
        ((Self::one() / Self::epsilon()) * Self::base() * Self::base()).sqrt() + Self::one()
    }
    #[inline]
    fn epsilon() -> Self {
        Self::epsilon()
    }
    #[inline]
    fn min_pos() -> Self {
        Self::min_positive_value()
    }
    #[inline]
    fn one() -> Self {
        Self::one()
    }
    #[inline]
    fn base() -> Self {
        Self::one() + Self::one()
    }
}