From 6437aa98e01774acc5adbfb0f2dd317d50a498b0 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Wed, 28 May 2008 23:50:36 -0700 Subject: [PATCH] - exp now understands complex numbers. - expt of complex exponent is implemented in terms of exp. --- scheme/ikarus.numerics.ss | 19 +++++++++---------- scheme/last-revision | 2 +- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scheme/ikarus.numerics.ss b/scheme/ikarus.numerics.ss index caa5473..5a5851d 100644 --- a/scheme/ikarus.numerics.ss +++ b/scheme/ikarus.numerics.ss @@ -2345,18 +2345,9 @@ [(flonum? m) (flexpt (inexact n) m)] [(ratnum? m) (flexpt (inexact n) (inexact m))] [(or (compnum? m) (cflonum? m)) - ;; n^m = e^(m ln n) - ;; z = m ln n - ;; e^z = e^(zr + zi i) - ;; = e^zr cos(zi) + e^zr sin(zi) i (let ([e 2.718281828459045]) (define (ln x) (/ (log x) (log e))) - (let ([z (* m (ln n))]) - (let ([zr (real-part z)] [zi (imag-part z)]) - (let ([e^zr (expt e zr)]) - (make-rectangular - (* e^zr (cos zi)) - (* e^zr (sin zi)))))))] + (exp (* m (ln n))))] [else (die 'expt "not a number" m)]))) (define quotient @@ -3036,6 +3027,14 @@ (if ($fx= x 0) 1 (flexp (fixnum->flonum x)))] [(bignum? x) (flexp (bignum->flonum x))] [(ratnum? x) (flexp (ratnum->flonum x))] + [(or (compnum? x) (cflonum? x)) + ;; e^x = e^(xr + xi i) + ;; = e^xr cos(xi) + e^xr sin(xi) i + (let ([xr (real-part x)] [xi (imag-part x)]) + (let ([e^xr (exp xr)]) + (make-rectangular + (* e^xr (cos xi)) + (* e^xr (sin xi)))))] [else (die 'exp "not a number" x)])) (define (bitwise-length n) diff --git a/scheme/last-revision b/scheme/last-revision index f3526cb..2edbc3d 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1490 +1491