Diffstat (limited to 'src/algebraic.rs')
| -rw-r--r-- | src/algebraic.rs | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/src/algebraic.rs b/src/algebraic.rs deleted file mode 100644 index a7d6082..0000000 --- a/src/algebraic.rs +++ /dev/null @@ -1,63 +0,0 @@ -//! Provides the algebraic math trait and macro. -/// Trait for Algebraic-ly math'd floats. Try to use [`algebraic::math`](`math`). -pub trait Float: Copy { - fn add(self, other: Self) -> Self; - fn sub(self, other: Self) -> Self; - fn mul(self, other: Self) -> Self; - fn div(self, other: Self) -> Self; - fn rem(self, other: Self) -> Self; - - fn eq(self, other: Self) -> bool; - fn lt(self, other: Self) -> bool; - fn le(self, other: Self) -> bool; - fn ne(self, other: Self) -> bool; - fn ge(self, other: Self) -> bool; - fn gt(self, other: Self) -> bool; - - fn deref(&self) -> Self { - *self - } - fn neg(self) -> Self; -} -use std::intrinsics::*; -macro_rules! imp { - ($this:ty) => { -#[rustfmt::skip] -impl Float for $this { - fn add(self, other: Self) -> Self { fadd_algebraic(self, other) } - fn sub(self, other: Self) -> Self { fsub_algebraic(self, other) } - fn mul(self, other: Self) -> Self { fmul_algebraic(self, other) } - fn div(self, other: Self) -> Self { fdiv_algebraic(self, other) } - fn rem(self, other: Self) -> Self { frem_algebraic(self, other) } - - fn eq(self, other: Self) -> bool { self == other } - fn lt(self, other: Self) -> bool { self < other } - fn le(self, other: Self) -> bool { self <= other } - fn ne(self, other: Self) -> bool { self != other } - fn ge(self, other: Self) -> bool { self >= other } - fn gt(self, other: Self) -> bool { self > other } - - fn deref(&self) -> Self { *self } - fn neg(self) -> Self { -self } -} - }; -} -imp!(f32); -imp!(f64); - -/// Changes all the math to algebraic float math. See [`fadd_algebraic`]. -/// -/// This allows automatic vectorization of float math easier for the compiler, among other things. -/// If you intend to create a function in this, first import [`lower::algebraic::Float`](crate::algebraic::Float), use [`lower::math`](crate::math). -/// -/// This would lower `a + b + c + d` to `alge_add(alge_add(alge_add(a, b), c), d)` (which could be organized by the compiler into `(a + b) + (c + d)` if it chooses) -#[macro_export] -#[doc(hidden)] -macro_rules! algebraic { - ($($x:tt)+) => {{ - use $crate::algebraic::Float as _; - lower_macros::math! { $($x)+ } - }} -} -#[doc(inline)] -pub use algebraic as math; |