diff options
| author | David Rajchenbach-Teller <dteller@mozilla.com> | 2011-10-17 14:44:29 +0200 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-10-17 11:22:57 -0700 |
| commit | a85e035038b2850cd65b9fa53cbccd2e00cf9153 (patch) | |
| tree | 57f1f93ff1abb6b280b13b4015bbd97fd960cf1f /src/lib | |
| parent | eba88ef3ea4a50247961075c1487650dbcf86262 (diff) | |
| download | rust-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.rs | 8 |
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())); } |
