File tree Expand file tree Collapse file tree 5 files changed +55
-8
lines changed Expand file tree Collapse file tree 5 files changed +55
-8
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: 4c309321e0979552f8c9230c6425c96b59ac80da
2
+ refs/heads/master: 79ca673af79aecc3c63334dee593ded838007e11
Original file line number Diff line number Diff line change 12
12
mod int;
13
13
mod uint;
14
14
mod u8;
15
+ mod u64;
15
16
mod vec;
16
17
mod ivec;
17
18
mod str;
Original file line number Diff line number Diff line change
1
+ fn to_str ( u64 n, uint radix ) -> str {
2
+ assert ( 0 u < radix && radix <= 16 u) ;
3
+
4
+ auto r64 = radix as u64 ;
5
+
6
+ fn digit ( u64 n) -> str {
7
+ ret alt ( n) {
8
+ case ( 0u64 ) { "0" }
9
+ case ( 1u64 ) { "1" }
10
+ case ( 2u64 ) { "2" }
11
+ case ( 3u64 ) { "3" }
12
+ case ( 4u64 ) { "4" }
13
+ case ( 5u64 ) { "5" }
14
+ case ( 6u64 ) { "6" }
15
+ case ( 7u64 ) { "7" }
16
+ case ( 8u64 ) { "8" }
17
+ case ( 9u64 ) { "9" }
18
+ case ( 10u64 ) { "a" }
19
+ case ( 11u64 ) { "b" }
20
+ case ( 12u64 ) { "c" }
21
+ case ( 13u64 ) { "d" }
22
+ case ( 14u64 ) { "e" }
23
+ case ( 15u64 ) { "f" }
24
+ case ( _) { fail }
25
+ } ;
26
+ }
27
+
28
+ if n == 0u64 { ret "0" ; }
29
+
30
+ auto s = "" ;
31
+
32
+ while ( n > 0u64 ) {
33
+ s = digit ( n % r64) + s;
34
+ n /= r64;
35
+ }
36
+ ret s;
37
+ }
38
+
39
+ fn str ( u64 n) -> str { ret to_str ( n, 10 u) ; }
Original file line number Diff line number Diff line change @@ -55,10 +55,15 @@ fn main(vec[str] argv) {
55
55
auto fibn = fib ( n) ;
56
56
auto stop = time:: precise_time_ns ( ) ;
57
57
58
- auto elapsed = ( stop - start) as int ;
59
- auto us_task = elapsed / fibn / 1000 ;
58
+ assert ( stop >= start) ;
60
59
61
- log_err #fmt( "Determined that fib(%d) = %d in %d ns (%d us / task)" ,
62
- n, fibn, elapsed, us_task) ;
60
+ auto elapsed = stop - start;
61
+ auto us_task = elapsed / ( fibn as u64 ) / ( 1000 as u64 ) ;
62
+
63
+ log_err #fmt( "Determined that fib(%d) = %d in %d%d ns (%d us / task)" ,
64
+ n, fibn,
65
+ ( elapsed / ( 1000000 as u64 ) ) as int ,
66
+ ( elapsed % ( 1000000 as u64 ) ) as int ,
67
+ us_task as int ) ;
63
68
}
64
69
}
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ import std::int::range;
19
19
import std:: io;
20
20
import std:: getopts;
21
21
import std:: task;
22
+ import std:: u64;
22
23
23
24
fn recv[ T ] ( & port[ T ] p) -> T {
24
25
let T x;
@@ -106,16 +107,17 @@ fn main(vec[str] argv) {
106
107
auto num_trials = 10 ;
107
108
108
109
auto out = io:: stdout ( ) ;
109
-
110
+
110
111
for each( int n in range( 1 , max + 1 ) ) {
111
112
for each( int i in range( 0 , num_trials) ) {
112
113
auto start = time:: precise_time_ns( ) ;
113
114
auto fibn = fib( n) ;
114
115
auto stop = time:: precise_time_ns( ) ;
115
116
116
- auto elapsed = ( stop - start) as int ;
117
+ auto elapsed = stop - start;
117
118
118
- out. write_line( #fmt( "%d\t %d\t %d" , n, fibn, elapsed) ) ;
119
+ out. write_line( #fmt( "%d\t %d\t %s" , n, fibn,
120
+ u64:: str( elapsed) ) ) ;
119
121
}
120
122
}
121
123
}
You can’t perform that action at this time.
0 commit comments