[git] CMU Common Lisp branch master updated. snapshot-2013-12-a-35-g4e3589d

This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMU Common Lisp". The branch, master has been updated via 4e3589d9d175382fe85b6efe2e3e94ccf598a88e (commit) via 1ba45c8177e4a6ef66f7fac3a3870f477a3d03eb (commit) from a9598e606edc4490b8b58aedb4ecdca64b6ffed9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4e3589d9d175382fe85b6efe2e3e94ccf598a88e Author: Raymond Toy <toy.raymond@gmail.com> Date: Sun Dec 22 22:41:03 2013 -0800 More documentation. o Derive the value of asin(2), lest we forget again why it is the way it is. o Use the formulas from the CLHS in the docstrings. diff --git a/src/code/irrat.lisp b/src/code/irrat.lisp index 078e56f..ff23a5e 100644 --- a/src/code/irrat.lisp +++ b/src/code/irrat.lisp @@ -1916,8 +1916,43 @@ Z may be any number, but the result is always a complex." (realpart sqrt-z+1)))))))) +;; What is the value of asin(2)? Here is a derivation. +;; +;; asin(2) = -i*log(i*2+sqrt(-3)) +;; = -i*log(2*i+sqrt(3)*i) +;; = -i*(log(2+sqrt(3)) + i*pi/2) +;; = pi/2 - i*log(2+sqrt(3)) +;; +;; Note that this differs from asin(2+0.0*i) because we support signed +;; zeroes. +;; +;; asin(2+0*i) = -i*log(i*(2+0*i) + sqrt(1-(4+0*i))) +;; = -i*log((2*i - 0) + sqrt(-3-0*i)) +;; = -i*log(-0 + 2*i - sqrt(3)*i) +;; = -i*log(-0 + i*(2-sqrt(3))) +;; = -i*(log(2-sqrt(3)) + i*pi/2) +;; = pi/2 - i*log(2-sqrt(3)) +;; = pi/2 + i*log(2+sqrt(3)) +;; +;; The last equation follows because (2-sqrt(3)) = 1/(2+sqrt(3)). +;; Hence asin(2) /= asin(2+0*i). +;; +;; Also +;; +;; asin(2-0*i) = -i*log(i*(2-0*i) + sqrt(1-(4-0*i))) +;; = -i*log((2*i + 0) + sqrt(-3+0*i)) +;; = -i*log(0 + 2*i + sqrt(3)*i) +;; = -i*log(0 + i*(2+sqrt(3))) +;; = -i*(log(2+sqrt(3)) + i*pi/2) +;; = pi/2 + i*log(2+sqrt(3)) +;; +;; Hence asin(2) = asin(2-0.0*i). +;; +;; Similar derivations will show that asin(-2) = asin(-2 + 0.0*i) and +;; asin(-2+0.0*i) is different from asin(-2-0.0*i) because of the +;; branch cut, of course. (defun complex-asin (z) - "Compute asin z = asinh(i*z)/i + "Compute asin z = -i*log(i*z + sqrt(1-z^2)) Z may be any number, but the result is always a complex." (declare (number z)) @@ -1950,7 +1985,7 @@ Z may be any number, but the result is always a complex." (- (realpart result))))) (defun complex-atan (z) - "Compute atan z = atanh (i*z) / i + "Compute atan z = (log(1+i*z) - log(1-i*z))/(2*i) Z may be any number, but the result is always a complex." (declare (number z)) commit 1ba45c8177e4a6ef66f7fac3a3870f477a3d03eb Author: Raymond Toy <toy.raymond@gmail.com> Date: Sun Dec 22 22:39:37 2013 -0800 Use the formulas from the CLHS in the docstrings. diff --git a/src/code/irrat-dd.lisp b/src/code/irrat-dd.lisp index 2eabb58..024ec93 100644 --- a/src/code/irrat-dd.lisp +++ b/src/code/irrat-dd.lisp @@ -1854,7 +1854,7 @@ Z may be any number, but the result is always a complex." (defun dd-complex-asin (z) - _N"Compute asin z = asinh(i*z)/i + _N"Compute asin z = -i*log(i*z + sqrt(1-z^2)) Z may be any number, but the result is always a complex." (declare (number z)) @@ -1894,7 +1894,7 @@ Z may be any number, but the result is always a complex." (- (realpart result))))) (defun dd-complex-atan (z) - _N"Compute atan z = atanh (i*z) / i + _N"Compute atan z = (log(1+i*z) - log(1-i*z))/(2*i) Z may be any number, but the result is always a complex." (declare (number z)) ----------------------------------------------------------------------- Summary of changes: src/code/irrat-dd.lisp | 4 ++-- src/code/irrat.lisp | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) hooks/post-receive -- CMU Common Lisp
participants (1)
-
rtoy@common-lisp.net