about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
authorDavid Rajchenbach-Teller <dteller@mozilla.com>2011-10-17 14:44:29 +0200
committerBrian Anderson <banderson@mozilla.com>2011-10-17 11:22:57 -0700
commita85e035038b2850cd65b9fa53cbccd2e00cf9153 (patch)
tree57f1f93ff1abb6b280b13b4015bbd97fd960cf1f /src/lib
parenteba88ef3ea4a50247961075c1487650dbcf86262 (diff)
downloadrust-a85e035038b2850cd65b9fa53cbccd2e00cf9153.tar.gz
rust-a85e035038b2850cd65b9fa53cbccd2e00cf9153.zip
[Lib] rand.rs: type rng now defines next_float
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/rand.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/lib/rand.rs b/src/lib/rand.rs
index fee8bbe06ba..b4e5ebc3058 100644
--- a/src/lib/rand.rs
+++ b/src/lib/rand.rs
@@ -14,6 +14,7 @@ native "rust" mod rustrt {
 type rng =
     obj {
         fn next() -> u32;
+        fn next_float() -> float;
     };
 
 resource rand_res(c: rustrt::rctx) { rustrt::rand_free(c); }
@@ -21,6 +22,13 @@ resource rand_res(c: rustrt::rctx) { rustrt::rand_free(c); }
 fn mk_rng() -> rng {
     obj rt_rng(c: @rand_res) {
         fn next() -> u32 { ret rustrt::rand_next(**c); }
+        fn next_float() -> float {
+          let u1 = rustrt::rand_next(**c) as float;
+          let u2 = rustrt::rand_next(**c) as float;
+          let u3 = rustrt::rand_next(**c) as float;
+          let scale = u32::max_value() as float;
+          ret ((u1 / scale + u2) / scale + u3) / scale;
+        }
     }
     ret rt_rng(@rand_res(rustrt::rand_new()));
 }