rust ffast-math (defunct, use lower)
Diffstat (limited to 'src/trait.rs')
-rw-r--r--src/trait.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/trait.rs b/src/trait.rs
new file mode 100644
index 0000000..dfe0c21
--- /dev/null
+++ b/src/trait.rs
@@ -0,0 +1,30 @@
+use std::intrinsics::{
+ fadd_fast as add, fdiv_fast as div, fmul_fast as mul, frem_fast as rem, fsub_fast as sub,
+};
+macro_rules! meth {
+ ($($name:ident)|+) => {
+ pub trait FastFloat: Copy {
+ $(#[doc(hidden)] unsafe fn $name(a: Self, b: Self) -> Self;)+
+ #[doc(hidden)]
+ fn bad(self) -> bool;
+ }
+
+ impl FastFloat for f32 {
+ $(unsafe fn $name(a: Self, b: Self) -> Self {
+ $name(a, b)
+ })+
+
+
+ fn bad(self) -> bool { self.is_nan() || self.is_infinite() }
+ }
+
+ impl FastFloat for f64 {
+ $(unsafe fn $name(a: Self, b: Self) -> Self {
+ $name(a, b)
+ })+
+
+ fn bad(self) -> bool { self.is_nan() || self.is_infinite() }
+ }
+ };
+}
+meth!(add | sub | div | mul | rem);