diff --git a/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp b/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp
index 1693aa2..b5050a5 100644
--- a/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp
+++ b/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp
@@ -19,85 +19,78 @@
 
 int main(int, char**)
 {
+    typedef std::minstd_rand0 E;
+    auto range = E::max() - E::min();
+
     {
-        typedef std::minstd_rand0 E;
         typedef float F;
         E r;
         F f = std::generate_canonical<F, 0>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef float F;
         E r;
         F f = std::generate_canonical<F, 1>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef float F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef float F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef float F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
 
     {
-        typedef std::minstd_rand0 E;
         typedef double F;
         E r;
         F f = std::generate_canonical<F, 0>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef double F;
         E r;
         F f = std::generate_canonical<F, 1>(r);
-        assert(f == truncate_fp((16807 - E::min()) / (E::max() - E::min() + F(1))));
+        assert(f == truncate_fp((16807 - E::min()) / (range + F(1))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef double F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r);
         assert(f == truncate_fp(
             (16807 - E::min() +
-            (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
-            ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))));
+            (282475249 - E::min()) * (range + F(1))) /
+            ((range + F(1)) * (range + F(1)))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef double F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r);
         assert(f == truncate_fp(
             (16807 - E::min() +
-            (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
-            ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))));
+            (282475249 - E::min()) * (range + F(1))) /
+            ((range + F(1)) * (range + F(1)))));
     }
     {
-        typedef std::minstd_rand0 E;
         typedef double F;
         E r;
         F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r);
         assert(f == truncate_fp(
             (16807 - E::min() +
-            (282475249 - E::min()) * (E::max() - E::min() + F(1))) /
-            ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))));
+            (282475249 - E::min()) * (range + F(1))) /
+            ((range + F(1)) * (range + F(1)))));
     }
 
   return 0;
