Changes in INT:->STRING to improve performance. 30% faster for huge
authorStephen Adams <edu/mit/csail/zurich/adams>
Tue, 8 Jul 1997 01:22:28 +0000 (01:22 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Tue, 8 Jul 1997 01:22:28 +0000 (01:22 +0000)
commit1df7e26e9f5a743d37d3d56673d725c67437568f
tree93ecf21f87740553c908776e50d4a9bdd70491c5
parentea2cdc18b35a843f4e05cf516e58d318b5c766ec
Changes in INT:->STRING to improve performance.  30% faster for huge
bignums (10^1000), up to 2x-3x faster for small bignums (up to
10^100), slightly faster for fixnums.

 . Use a local version of DIGIT->CHAR since we don't need to check the
   radix.

 . PRINT-FIXNUM modified to be useful for generating digits in the
   middle of a number.

 . PRINT-MEDIUM and PRINT-LARGE work in units of several digits, the
   length of a unit pre-computed so that a unit can be printed using
   fixnum arithmetic.

 . PRINT-MEDIUM chops off groups of digits that can be printed by
   PRINT-FIXNUM.  The microcode primitive LISTIFY-BIGNUM is no longer
   used.

 . PRINT-LARGE has a special check to try to avoid the last multiply
   in building the power stack (which is asymptotically 2/3 of the
   cost of building the stack).  The recursion termination check is
   generalized to also catch sequences of digits with enough leading
   zeroes to be formatted by PRINT-FIXNUM (this can double the speed
   of printing numbers with many zeros).
v7/src/runtime/arith.scm