diff options
author | Miles Bader <miles@gnu.org> | 2007-08-03 05:27:43 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 2007-08-03 05:27:43 +0000 |
commit | 49b23c2a404cf31fb1aeecc7932a7304aaf16a67 (patch) | |
tree | 259f81c54acb77cd4aeb47ce88e5e56ff7141a99 /lisp/calc | |
parent | 9899d01a0ccec166e04caa60657a44e614be50cd (diff) | |
parent | 4211679b08d6a9c369cb22f085b9bb61d5d4eeda (diff) | |
download | emacs-49b23c2a404cf31fb1aeecc7932a7304aaf16a67.tar.gz emacs-49b23c2a404cf31fb1aeecc7932a7304aaf16a67.tar.bz2 emacs-49b23c2a404cf31fb1aeecc7932a7304aaf16a67.zip |
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 839-842)
- Update from CVS
- Change capitalization of VC backend names for new backends
Revision: emacs@sv.gnu.org/emacs--multi-tty--0--patch-29
Diffstat (limited to 'lisp/calc')
-rw-r--r-- | lisp/calc/calc-math.el | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/lisp/calc/calc-math.el b/lisp/calc/calc-math.el index a442f2b4e03..a4dad15c14e 100644 --- a/lisp/calc/calc-math.el +++ b/lisp/calc/calc-math.el @@ -529,13 +529,16 @@ If this can't be done, return NIL." (defun math-sqrt-raw (a &optional guess) ; [F F F] (if (not (Math-posp a)) (math-sqrt a) - (if (null guess) - (let ((ldiff (- (math-numdigs (nth 1 a)) 6))) - (or (= (% (+ (nth 2 a) ldiff) 2) 0) (setq ldiff (1+ ldiff))) - (setq guess (math-make-float (math-isqrt-small - (math-scale-int (nth 1 a) (- ldiff))) - (/ (+ (nth 2 a) ldiff) 2))))) - (math-sqrt-float-iter a guess))) + (cond + ((math-use-emacs-fn 'sqrt a)) + (t + (if (null guess) + (let ((ldiff (- (math-numdigs (nth 1 a)) 6))) + (or (= (% (+ (nth 2 a) ldiff) 2) 0) (setq ldiff (1+ ldiff))) + (setq guess (math-make-float (math-isqrt-small + (math-scale-int (nth 1 a) (- ldiff))) + (/ (+ (nth 2 a) ldiff) 2))))) + (math-sqrt-float-iter a guess))))) (defun math-sqrt-float-iter (a guess) ; [F F F] (math-working "sqrt" guess) @@ -1201,11 +1204,13 @@ If this can't be done, return NIL." ((math-lessp-float x (math-neg (math-pi-over-4))) (math-neg (math-cos-raw-2 (math-add (math-pi-over-2) x) orgx))) ((math-nearly-zerop-float x orgx) '(float 0 0)) + ((math-use-emacs-fn 'sin x)) (calc-symbolic-mode (signal 'inexact-result nil)) (t (math-sin-series x 6 4 x (math-neg-float (math-sqr-float x))))))) (defun math-cos-raw-2 (x orgx) ; [F F] (cond ((math-nearly-zerop-float x orgx) '(float 1 0)) + ((math-use-emacs-fn 'cos x)) (calc-symbolic-mode (signal 'inexact-result nil)) (t (let ((xnegsqr (math-neg-float (math-sqr-float x)))) (math-sin-series @@ -1319,6 +1324,7 @@ If this can't be done, return NIL." ((Math-integer-negp (nth 1 x)) (math-neg-float (math-arctan-raw (math-neg-float x)))) ((math-zerop x) x) + ((math-use-emacs-fn 'atan x)) (calc-symbolic-mode (signal 'inexact-result nil)) ((math-equal-int x 1) (math-pi-over-4)) ((math-equal-int x -1) (math-neg (math-pi-over-4))) @@ -1737,10 +1743,13 @@ If this can't be done, return NIL." '(float 0 0)) (calc-symbolic-mode (signal 'inexact-result nil)) ((math-posp (nth 1 x)) ; positive and real - (let ((xdigs (1- (math-numdigs (nth 1 x))))) - (math-add-float (math-ln-raw-2 (list 'float (nth 1 x) (- xdigs))) - (math-mul-float (math-float (+ (nth 2 x) xdigs)) - (math-ln-10))))) + (cond + ((math-use-emacs-fn 'log x)) + (t + (let ((xdigs (1- (math-numdigs (nth 1 x))))) + (math-add-float (math-ln-raw-2 (list 'float (nth 1 x) (- xdigs))) + (math-mul-float (math-float (+ (nth 2 x) xdigs)) + (math-ln-10))))))) ((math-zerop x) (math-reject-arg x "*Logarithm of zero")) ((eq calc-complex-mode 'polar) ; negative and real |