Adding more support for working with u64s.
This commit is contained in:
parent
4c309321e0
commit
79ca673af7
@ -12,6 +12,7 @@
|
||||
mod int;
|
||||
mod uint;
|
||||
mod u8;
|
||||
mod u64;
|
||||
mod vec;
|
||||
mod ivec;
|
||||
mod str;
|
||||
|
39
src/lib/u64.rs
Normal file
39
src/lib/u64.rs
Normal file
@ -0,0 +1,39 @@
|
||||
fn to_str(u64 n, uint radix) -> str {
|
||||
assert(0u < radix && radix <= 16u);
|
||||
|
||||
auto r64 = radix as u64;
|
||||
|
||||
fn digit(u64 n) -> str {
|
||||
ret alt (n) {
|
||||
case (0u64) { "0" }
|
||||
case (1u64) { "1" }
|
||||
case (2u64) { "2" }
|
||||
case (3u64) { "3" }
|
||||
case (4u64) { "4" }
|
||||
case (5u64) { "5" }
|
||||
case (6u64) { "6" }
|
||||
case (7u64) { "7" }
|
||||
case (8u64) { "8" }
|
||||
case (9u64) { "9" }
|
||||
case (10u64) { "a" }
|
||||
case (11u64) { "b" }
|
||||
case (12u64) { "c" }
|
||||
case (13u64) { "d" }
|
||||
case (14u64) { "e" }
|
||||
case (15u64) { "f" }
|
||||
case (_) { fail }
|
||||
};
|
||||
}
|
||||
|
||||
if n == 0u64 { ret "0"; }
|
||||
|
||||
auto s = "";
|
||||
|
||||
while(n > 0u64) {
|
||||
s = digit(n % r64) + s;
|
||||
n /= r64;
|
||||
}
|
||||
ret s;
|
||||
}
|
||||
|
||||
fn str(u64 n) -> str { ret to_str(n, 10u); }
|
@ -55,10 +55,15 @@ fn main(vec[str] argv) {
|
||||
auto fibn = fib(n);
|
||||
auto stop = time::precise_time_ns();
|
||||
|
||||
auto elapsed = (stop - start) as int;
|
||||
auto us_task = elapsed / fibn / 1000;
|
||||
assert(stop >= start);
|
||||
|
||||
log_err #fmt("Determined that fib(%d) = %d in %d ns (%d us / task)",
|
||||
n, fibn, elapsed, us_task);
|
||||
auto elapsed = stop - start;
|
||||
auto us_task = elapsed / (fibn as u64) / (1000 as u64);
|
||||
|
||||
log_err #fmt("Determined that fib(%d) = %d in %d%d ns (%d us / task)",
|
||||
n, fibn,
|
||||
(elapsed / (1000000 as u64)) as int,
|
||||
(elapsed % (1000000 as u64)) as int,
|
||||
us_task as int);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import std::int::range;
|
||||
import std::io;
|
||||
import std::getopts;
|
||||
import std::task;
|
||||
import std::u64;
|
||||
|
||||
fn recv[T](&port[T] p) -> T {
|
||||
let T x;
|
||||
@ -106,16 +107,17 @@ fn main(vec[str] argv) {
|
||||
auto num_trials = 10;
|
||||
|
||||
auto out = io::stdout();
|
||||
|
||||
|
||||
for each(int n in range(1, max + 1)) {
|
||||
for each(int i in range(0, num_trials)) {
|
||||
auto start = time::precise_time_ns();
|
||||
auto fibn = fib(n);
|
||||
auto stop = time::precise_time_ns();
|
||||
|
||||
auto elapsed = (stop - start) as int;
|
||||
auto elapsed = stop - start;
|
||||
|
||||
out.write_line(#fmt("%d\t%d\t%d", n, fibn, elapsed));
|
||||
out.write_line(#fmt("%d\t%d\t%s", n, fibn,
|
||||
u64::str(elapsed)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user