about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-05-12 15:07:42 -0700
committerbors <bors@rust-lang.org>2013-05-12 15:07:42 -0700
commit830b945a9db072b68970b6f83dfafc1aaff8f837 (patch)
tree05a6227f5fcff2e120a06eab9bd46ea95e628114
parent7dc94b87686ffd78a71442304158eb91d43885b0 (diff)
parent4f8084a363b352e4a1d75f9ab53f6defcb65d366 (diff)
downloadrust-830b945a9db072b68970b6f83dfafc1aaff8f837.tar.gz
rust-830b945a9db072b68970b6f83dfafc1aaff8f837.zip
auto merge of #6439 : bjz/rust/float-classify, r=brson
-rw-r--r--src/libcore/num/f32.rs17
-rw-r--r--src/libcore/num/f64.rs17
2 files changed, 14 insertions, 20 deletions
diff --git a/src/libcore/num/f32.rs b/src/libcore/num/f32.rs
index 93e881c50e8..a872a6388ba 100644
--- a/src/libcore/num/f32.rs
+++ b/src/libcore/num/f32.rs
@@ -578,10 +578,7 @@ impl Float for f32 {
     /// Returns `true` if the number is neither zero, infinite, subnormal or NaN
     #[inline(always)]
     fn is_normal(&self) -> bool {
-        match self.classify() {
-            FPNormal => true,
-            _ => false,
-        }
+        self.classify() == FPNormal
     }
 
     /// Returns the floating point category of the number. If only one property is going to
@@ -591,14 +588,14 @@ impl Float for f32 {
         static MAN_MASK: u32 = 0x007fffff;
 
         match (
+            unsafe { ::cast::transmute::<f32,u32>(*self) } & MAN_MASK,
             unsafe { ::cast::transmute::<f32,u32>(*self) } & EXP_MASK,
-            unsafe { ::cast::transmute::<f32,u32>(*self) } & MAN_MASK
         ) {
-            (EXP_MASK, 0)        => FPInfinite,
-            (EXP_MASK, _)        => FPNaN,
-            (exp, _) if exp != 0 => FPNormal,
-            _ if self.is_zero()  => FPZero,
-            _                    => FPSubnormal,
+            (0, 0)        => FPZero,
+            (_, 0)        => FPSubnormal,
+            (0, EXP_MASK) => FPInfinite,
+            (_, EXP_MASK) => FPNaN,
+            _             => FPNormal,
         }
     }
 
diff --git a/src/libcore/num/f64.rs b/src/libcore/num/f64.rs
index 096206d7183..8a17ae91934 100644
--- a/src/libcore/num/f64.rs
+++ b/src/libcore/num/f64.rs
@@ -621,10 +621,7 @@ impl Float for f64 {
     /// Returns `true` if the number is neither zero, infinite, subnormal or NaN
     #[inline(always)]
     fn is_normal(&self) -> bool {
-        match self.classify() {
-            FPNormal => true,
-            _ => false,
-        }
+        self.classify() == FPNormal
     }
 
     /// Returns the floating point category of the number. If only one property is going to
@@ -634,14 +631,14 @@ impl Float for f64 {
         static MAN_MASK: u64 = 0x000fffffffffffff;
 
         match (
+            unsafe { ::cast::transmute::<f64,u64>(*self) } & MAN_MASK,
             unsafe { ::cast::transmute::<f64,u64>(*self) } & EXP_MASK,
-            unsafe { ::cast::transmute::<f64,u64>(*self) } & MAN_MASK
         ) {
-            (EXP_MASK, 0)        => FPInfinite,
-            (EXP_MASK, _)        => FPNaN,
-            (exp, _) if exp != 0 => FPNormal,
-            _ if self.is_zero()  => FPZero,
-            _                    => FPSubnormal,
+            (0, 0)        => FPZero,
+            (_, 0)        => FPSubnormal,
+            (0, EXP_MASK) => FPInfinite,
+            (_, EXP_MASK) => FPNaN,
+            _             => FPNormal,
         }
     }