From a85e035038b2850cd65b9fa53cbccd2e00cf9153 Mon Sep 17 00:00:00 2001 From: David Rajchenbach-Teller Date: Mon, 17 Oct 2011 14:44:29 +0200 Subject: [PATCH] [Lib] rand.rs: type rng now defines next_float --- src/lib/rand.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/rand.rs b/src/lib/rand.rs index fee8bbe06bae..b4e5ebc3058f 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())); }