@@ -68,12 +68,12 @@ pub fn fmt_bench_samples(bs: &BenchSamples) -> String {
68
68
use std:: fmt:: Write ;
69
69
let mut output = String :: new ( ) ;
70
70
71
- let median = bs. ns_iter_summ . median as usize ;
72
- let deviation = ( bs. ns_iter_summ . max - bs. ns_iter_summ . min ) as usize ;
71
+ let median = bs. ns_iter_summ . median ;
72
+ let deviation = bs. ns_iter_summ . max - bs. ns_iter_summ . min ;
73
73
74
74
write ! (
75
75
output,
76
- "{:>11 } ns/iter (+/- {})" ,
76
+ "{:>14 } ns/iter (+/- {})" ,
77
77
fmt_thousands_sep( median, ',' ) ,
78
78
fmt_thousands_sep( deviation, ',' )
79
79
)
@@ -85,24 +85,27 @@ pub fn fmt_bench_samples(bs: &BenchSamples) -> String {
85
85
}
86
86
87
87
// Format a number with thousands separators
88
- fn fmt_thousands_sep ( mut n : usize , sep : char ) -> String {
88
+ fn fmt_thousands_sep ( mut n : f64 , sep : char ) -> String {
89
89
use std:: fmt:: Write ;
90
90
let mut output = String :: new ( ) ;
91
91
let mut trailing = false ;
92
92
for & pow in & [ 9 , 6 , 3 , 0 ] {
93
93
let base = 10_usize . pow ( pow) ;
94
- if pow == 0 || trailing || n / base != 0 {
95
- if !trailing {
96
- write ! ( output, "{}" , n / base) . unwrap ( ) ;
97
- } else {
98
- write ! ( output, "{:03}" , n / base) . unwrap ( ) ;
94
+ if pow == 0 || trailing || n / base as f64 >= 1.0 {
95
+ match ( pow, trailing) {
96
+ // modern CPUs can execute multiple instructions per nanosecond
97
+ // e.g. benching an ADD takes about 0.25ns.
98
+ ( 0 , true ) => write ! ( output, "{:06.2}" , n / base as f64 ) . unwrap ( ) ,
99
+ ( 0 , false ) => write ! ( output, "{:.2}" , n / base as f64 ) . unwrap ( ) ,
100
+ ( _, true ) => write ! ( output, "{:03}" , n as usize / base) . unwrap ( ) ,
101
+ _ => write ! ( output, "{}" , n as usize / base) . unwrap ( )
99
102
}
100
103
if pow != 0 {
101
104
output. push ( sep) ;
102
105
}
103
106
trailing = true ;
104
107
}
105
- n %= base;
108
+ n %= base as f64 ;
106
109
}
107
110
108
111
output
0 commit comments