From: Nikodemus S. <de...@us...> - 2006-10-30 10:53:59
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv18144/src/code Modified Files: irrat.lisp Log Message: 0.9.18.17: Hyperbolic functions for Win32 * Lisp-side definitions for %TANH, %ASINH, %ACOSH, and %ATANH. * One sequence test tweaked to make it run on Windows. Index: irrat.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/irrat.lisp,v retrieving revision 1.32 retrieving revision 1.33 diff -u -d -r1.32 -r1.33 --- irrat.lisp 19 Apr 2006 14:16:06 -0000 1.32 +++ irrat.lisp 30 Oct 2006 10:53:50 -0000 1.33 @@ -76,10 +76,30 @@ #!-x86 (def-math-rtn "atan2" 2) (def-math-rtn "sinh" 1) (def-math-rtn "cosh" 1) -#!-win32(def-math-rtn "tanh" 1) -#!-win32(def-math-rtn "asinh" 1) -#!-win32(def-math-rtn "acosh" 1) -#!-win32(def-math-rtn "atanh" 1) +#!-win32 +(progn + (def-math-rtn "tanh" 1) + (def-math-rtn "asinh" 1) + (def-math-rtn "acosh" 1) + (def-math-rtn "atanh" 1)) +#!+win32 +(progn + (declaim (inline %tanh)) + (defun %tanh (number) + (/ (%sinh number) (%cosh number))) + (declaim (inline %asinh)) + (defun %asinh (number) + (log (+ number (sqrt (+ (* number number) 1.0d0))) #.(exp 1.0d0))) + (declaim (inline %acosh)) + (defun %acosh (number) + (log (+ number (sqrt (- (* number number) 1.0d0))) #.(exp 1.0d0))) + (declaim (inline %atanh)) + (defun %atanh (number) + (let ((ratio (/ (1+ number) (1- number)))) + ;; Were we effectively zero? + (if (= ratio -1.0d0) + 0.0d0 + (/ (log ratio #.(exp 1.0d0)) 2.0d0))))) ;;; exponential and logarithmic #!-x86 (def-math-rtn "exp" 1) |