Skip to content

Commit d2b23d0

Browse files
committed
bigint: small to_str_radix optimization
Before: test fac_to_string ... bench: 1,630 ns/iter (+/- 34) test fib_to_string ... bench: 359 ns/iter (+/- 11) test to_str_radix_02 ... bench: 3,097 ns/iter (+/- 19) test to_str_radix_08 ... bench: 1,146 ns/iter (+/- 38) test to_str_radix_10 ... bench: 4,248 ns/iter (+/- 36) test to_str_radix_16 ... bench: 881 ns/iter (+/- 44) test to_str_radix_36 ... bench: 8,073 ns/iter (+/- 75) After: test fac_to_string ... bench: 1,492 ns/iter (+/- 20) test fib_to_string ... bench: 368 ns/iter (+/- 7) test to_str_radix_02 ... bench: 2,038 ns/iter (+/- 47) test to_str_radix_08 ... bench: 812 ns/iter (+/- 9) test to_str_radix_10 ... bench: 3,919 ns/iter (+/- 40) test to_str_radix_16 ... bench: 703 ns/iter (+/- 58) test to_str_radix_36 ... bench: 7,852 ns/iter (+/- 81)
1 parent fe513cc commit d2b23d0

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/bigint.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1471,8 +1471,12 @@ fn to_str_radix_reversed(u: &BigUint, radix: u32) -> Vec<u8> {
14711471

14721472
// Now convert everything to ASCII digits.
14731473
for r in &mut res {
1474-
const DIGITS: &'static [u8; 36] = b"0123456789abcdefghijklmnopqrstuvwxyz";
1475-
*r = DIGITS[*r as usize];
1474+
debug_assert!((*r as u32) < radix);
1475+
if *r < 10 {
1476+
*r += b'0';
1477+
} else {
1478+
*r += b'a' - 10;
1479+
}
14761480
}
14771481
res
14781482
}

0 commit comments

Comments
 (0)