From af6562721bb97e7d0067a27a3162220cae9f9508 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Fri, 4 Jan 2008 21:46:50 -0500 Subject: [PATCH] Fixes bug 180170: Missing bignum sqrt --- scheme/ikarus.numerics.ss | 12 +++++++++++- scheme/last-revision | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/scheme/ikarus.numerics.ss b/scheme/ikarus.numerics.ss index 5e73ba6..a0b43d7 100644 --- a/scheme/ikarus.numerics.ss +++ b/scheme/ikarus.numerics.ss @@ -2065,7 +2065,17 @@ (cond [(flonum? x) (foreign-call "ikrt_fl_sqrt" x)] [(fixnum? x) (foreign-call "ikrt_fx_sqrt" x)] - [(bignum? x) (die 'sqrt "BUG: bignum sqrt not implemented")] + [(bignum? x) + (unless ($bignum-positive? x) + (error 'sqrt "complex results not supported" x)) + (let-values ([(s r) (exact-integer-sqrt x)]) + (cond + [(eq? r 0) s] + [else + (let ([v (sqrt (inexact x))]) + (cond + [(infinite? v) (inexact s)] + [else v]))]))] [(ratnum? x) (/ (sqrt ($ratnum-n x)) (sqrt ($ratnum-d x)))] [else (die 'sqrt "BUG: unsupported" x)]))) diff --git a/scheme/last-revision b/scheme/last-revision index a38c571..7ae5be6 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1328 +1329