[gambit-list] Big number Bug?
dillo gimp
dillogimp at gmail.com
Thu Apr 26 21:54:48 EDT 2007
On 4/27/07, dillo gimp <dillogimp at gmail.com> wrote:
> On 4/27/07, Bradley Lucier <lucier at math.purdue.edu> wrote:
> >
> > On Apr 26, 2007, at 11:47 AM, Bradley Lucier wrote:
> >
> > > Here's a fix for the bug. (Marc, can you change this in _num.scm?)
> >
> > Here's a somewhat better fix (faster for some "obvious" cases, which
> > I hope are correct ;-).
> >
> > (define-prim (##exact-int.div x y)
> >
> > (define (big-quotient x y)
> > (let* ((x-negative? (##negative? x))
> > (abs-x (if x-negative? (##negate x) x))
> > (y-negative? (##negative? y))
> > (abs-y (if y-negative? (##negate y) y)))
> > (if (##< abs-x abs-y)
> > (##cons 0 x)
> >
> > ;; at least one of x and y is a bignum, so
> > ;; here abs-x must be a bignum
> >
> > (let ((result (##bignum.div abs-x abs-y)))
> >
> > (if (##not (##eq? x-negative? y-negative?))
> > (##set-car! result (##negate (##car result))))
> >
> > (if x-negative?
> > (##set-cdr! result (##negate (##cdr result))))
> >
> > result))))
> >
> > (cond ((##eq? y 1)
> > (##cons x 0))
> > ((##eq? y -1)
> > (##cons (##negate x) 0))
> > ((##eq? x y) ;; can come up in rational arithmetic
> > (##cons 1 0))
> > ((##fixnum? x)
> > (if (##fixnum? y)
> > (##cons (##fixnum.quotient x y) ; note: y can't be -1
> > (##fixnum.remainder x y))
> > ;; y is a bignum, x is a fixnum
> > (if (##fixnum.< 1 (##bignum.adigit-length y))
> > ;; y has at least two adigits, so
> > ;; (abs y) > (abs x)
> > (##cons 0 x)
> > (big-quotient x y))))
> > ((and (##bignum? y)
> > (##fixnum.< 1 (##fixnum.- (##bignum.adigit-length y)
> > (##bignum.adigit-length x))))
> > ;; x and y are bignums, and y has at least two more adigits
> > ;; than x, so (abs y) > (abs x)
> > (##cons 0 x))
> > (else
> > (big-quotient x y))))
>
> Is this "make check" error OK to ignore?
> It didn't happen before.
> ------------ TEST 4 (interpreter running an application)
> rm -f mix.o
> ../gsi/gsi -f mix.scm > test4.out
> 6.352035 secs elapsed cpu time
> heartbeat frequency = 893.414472684738 Hz
> *** possible problem: expected heartbeat frequency = 1001.0010010010009 Hz
> diff test4.ok test4.out && rm -f test4.out
> 8450,8451c8450
> < *** ERROR IN ##make-string -- Heap overflow
> < ok
> ---
> > (expected error)
> make[1]: *** [test4] Error 1
> make[1]: Leaving directory `/build/gambc-4.0b22/tests'
> make: *** [check] Error 2
The error disappear after I take out "--enable-char-size=1".
>
>
>
>
> > _______________________________________________
> > Gambit-list mailing list
> > Gambit-list at iro.umontreal.ca
> > https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
> >
>
More information about the Gambit-list
mailing list