@@ -68,12 +68,12 @@ pub fn fmt_bench_samples(bs: &BenchSamples) -> String {
6868 use std:: fmt:: Write ;
6969 let mut output = String :: new ( ) ;
7070
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 ;
7373
7474 write ! (
7575 output,
76- "{:>11 } ns/iter (+/- {})" ,
76+ "{:>14 } ns/iter (+/- {})" ,
7777 fmt_thousands_sep( median, ',' ) ,
7878 fmt_thousands_sep( deviation, ',' )
7979 )
@@ -85,24 +85,27 @@ pub fn fmt_bench_samples(bs: &BenchSamples) -> String {
8585}
8686
8787// 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 {
8989 use std:: fmt:: Write ;
9090 let mut output = String :: new ( ) ;
9191 let mut trailing = false ;
9292 for & pow in & [ 9 , 6 , 3 , 0 ] {
9393 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 ( )
99102 }
100103 if pow != 0 {
101104 output. push ( sep) ;
102105 }
103106 trailing = true ;
104107 }
105- n %= base;
108+ n %= base as f64 ;
106109 }
107110
108111 output
0 commit comments