Changes in INT:->STRING to improve performance. 30% faster for huge
authorStephen Adams <edu/mit/csail/zurich/adams>
Mon, 7 Jul 1997 20:24:45 +0000 (20:24 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Mon, 7 Jul 1997 20:24:45 +0000 (20:24 +0000)
commitc5fae0be8d9a91804abbc4d2bf981fd255d8af4e
tree2ae6160ea46f681bfd337c401278891c9f8f53e0
parentbdb297dc69bbaf6af3ce20c22cf97f0091eb4db4
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