[Alexandria-devel] BISECT-BIG in %MULTIPLY-RANGE is never called

Jan Moringen jmoringe at techfak.uni-bielefeld.de
Sun May 11 20:58:58 UTC 2014


Hi,

out of curiosity, I tried

  (alexandria:binomial-coefficient 2000000000000 20)

on a x86 machine (in SBCL between 1.1.18 and master with debug = 3,
safety = 3 compiler policy) which resulted in the below session.

Looking at %MULTIPLY-RANGE, I noticed that BISECT-BIG was never called.
Calling BISECT-BIG when at least one argument is not a fixnum fixes the
problem. The attached patch does that and adds a test case to the test
suite.

Kind regards,
Jan

CL-USER(5): (alexandria:binomial-coefficient 2000000000000 20)

debugger invoked on a TYPE-ERROR in thread
#<THREAD "main thread" RUNNING {B4748E9}>:
  The value 1999999999981 is not of type (INTEGER 1 536870911).

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(ALEXANDRIA.0.DEV::%MULTIPLY-RANGE 1999999999981 2000000000000)
; file: /home/jmoringe/code/cl/alexandria/numbers.lisp

   source: (BISECT I J)
0] 0

[ applying change in numbers.lisp ]

CL-USER(6): (ql:quickload :alexandria)
To load "alexandria":
  Load 1 ASDF system:
    alexandria
; Loading "alexandria"
[package alexandria.0.dev]................
(:ALEXANDRIA)
CL-USER(7): (alexandria:binomial-coefficient 2000000000000 20)

430998041177272843950422879590338454856322722740402365741730748431530623813012487773080486408378680853987520854296499536311275320016878730999689934464711239072435565454954447356845336730100919970769793030177499999999900000000000

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Actually-use-BISECT-BIG-in-MULTIPLY-RANGE.patch
Type: text/x-patch
Size: 2058 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/alexandria-devel/attachments/20140511/b708ee2c/attachment.bin>


More information about the alexandria-devel mailing list