diff options
Diffstat (limited to 'modules/language/python/module/math.scm')
-rw-r--r-- | modules/language/python/module/math.scm | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/modules/language/python/module/math.scm b/modules/language/python/module/math.scm index 0dfae92..7b4093d 100644 --- a/modules/language/python/module/math.scm +++ b/modules/language/python/module/math.scm @@ -13,9 +13,11 @@ erf erfc gamma lgamma e tau inf nan)) (define (real! s x) - (if (= (imag-part x) 0) - (real-part x) - (raise ValueError "real math fkn result in complex number" s))) + (if (complex? x) + (if (= (imag-part x) 0) + (real-part x) + (raise ValueError "real math fkn result in complex number" s)) + x)) (define ceil (lambda (x) @@ -96,7 +98,11 @@ (list double)))) (lambda (x) (f x)))) -(define (log x) (real! 'log ((@ (guile) log) x))) +(define* (log x #:optional (base #f)) + (real! 'log + (if (not base) + ((@ (guile) log) x) + (/ ((@ (guile) log) x) ((@ (guile) log) base))))) (define log1p (let ((f (pointer->procedure double @@ -111,11 +117,11 @@ (list double)))) (lambda (x) (f x)))) -(define (log10 x) (real! 'log10 (@ (guile) log10))) - +(define (log10 x) (real! 'log10 ((@ (guile) log10) x))) + (define (pow x y) (real! 'pow ((@ (guile) expt) x y))) -(define (sqrt x) (real! 'sqrt (@ (guile) sqrt))) +(define (sqrt x) (real! 'sqrt ((@ (guile) sqrt) x))) ;; Trigs (define (acos x) (real! 'acos ((@ (guile) acos) x))) |