implement `Rand` for (i|u)i128
diff --git a/Cargo.toml b/Cargo.toml
index 755b6f1..393ec45 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,6 +14,10 @@
 keywords = ["random", "rng"]
 categories = ["algorithms"]
 
+[features]
+i128_support = []
+nightly = ["i128_support"]
+
 [dependencies]
 libc = "0.2"
 
diff --git a/src/lib.rs b/src/lib.rs
index d198766..fd0fbf0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -243,6 +243,8 @@
 
 #![deny(missing_debug_implementations)]
 
+#![cfg_attr(feature = "i128_support", feature(i128_type))]
+
 #[cfg(test)] #[macro_use] extern crate log;
 
 
diff --git a/src/rand_impls.rs b/src/rand_impls.rs
index 5a7e3de..a9cf5d9 100644
--- a/src/rand_impls.rs
+++ b/src/rand_impls.rs
@@ -54,6 +54,14 @@
     }
 }
 
+#[cfg(feature = "i128_support")]
+impl Rand for i128 {
+    #[inline]
+    fn rand<R: Rng>(rng: &mut R) -> i128 {
+        rng.gen::<u128>() as i128
+    }
+}
+
 impl Rand for usize {
     #[inline]
     fn rand<R: Rng>(rng: &mut R) -> usize {
@@ -93,6 +101,15 @@
     }
 }
 
+#[cfg(feature = "i128_support")]
+impl Rand for u128 {
+    #[inline]
+    fn rand<R: Rng>(rng: &mut R) -> u128 {
+        ((rng.next_u64() as u128) << 64) | (rng.next_u64() as u128)
+    }
+}
+
+
 macro_rules! float_impls {
     ($mod_name:ident, $ty:ty, $mantissa_bits:expr, $method_name:ident) => {
         mod $mod_name {