1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-24 07:20:37 +00:00

calc/calc.el (math-normalize-error): New variable.

(math-normalize): Set `math-normalize-error' to t when there's an error.

calc/calc-alg.el (math-simplify): Don't simplify when `math-normalize'
returns an error.
This commit is contained in:
Jay Belanger 2012-07-29 13:51:16 -05:00
parent 26918d77f7
commit 9052f9f01e
3 changed files with 28 additions and 4 deletions

View File

@ -1,3 +1,12 @@
2012-07-29 Jay Belanger <jay.p.belanger@gmail.com>
* calc/calc.el (math-normalize-error): New variable.
(math-normalize): Set `math-normalize-error' to t
when there's an error.
* calc/calc-alg.el (math-simplify): Don't simplify when
`math-normalize' returns an error.
2012-07-29 Eli Zaretskii <eliz@gnu.org>
* international/mule-cmds.el (set-locale-environment): Revert last

View File

@ -356,6 +356,8 @@
;; math-simplify-step, which is called by math-simplify.
(defvar math-top-only)
;; math-normalize-error is declared in calc.el.
(defvar math-normalize-error)
(defun math-simplify (top-expr)
(let ((math-simplifying t)
(math-top-only (consp calc-simplify-mode))
@ -383,10 +385,12 @@
(calc-with-default-simplification
(while (let ((r simp-rules))
(setq res (math-normalize top-expr))
(while r
(setq res (math-rewrite res (car r))
r (cdr r)))
(not (equal top-expr (setq res (math-simplify-step res)))))
(if (not math-normalize-error)
(progn
(while r
(setq res (math-rewrite res (car r))
r (cdr r)))
(not (equal top-expr (setq res (math-simplify-step res)))))))
(setq top-expr res)))))
top-expr)

View File

@ -2583,7 +2583,11 @@ largest Emacs integer.")
;;; Reduce an object to canonical (normalized) form. [O o; Z Z] [Public]
(defvar math-normalize-a)
(defvar math-normalize-error nil
"Non-nil if the last call the `math-normalize' returned an error.")
(defun math-normalize (math-normalize-a)
(setq math-normalize-error nil)
(cond
((not (consp math-normalize-a))
(if (integerp math-normalize-a)
@ -2672,31 +2676,38 @@ largest Emacs integer.")
(fboundp (car math-normalize-a))))
(apply (car math-normalize-a) args)))))
(wrong-number-of-arguments
(setq math-normalize-error t)
(calc-record-why "*Wrong number of arguments"
(cons (car math-normalize-a) args))
nil)
(wrong-type-argument
(setq math-normalize-error t)
(or calc-next-why
(calc-record-why "Wrong type of argument"
(cons (car math-normalize-a) args)))
nil)
(args-out-of-range
(setq math-normalize-error t)
(calc-record-why "*Argument out of range"
(cons (car math-normalize-a) args))
nil)
(inexact-result
(setq math-normalize-error t)
(calc-record-why "No exact representation for result"
(cons (car math-normalize-a) args))
nil)
(math-overflow
(setq math-normalize-error t)
(calc-record-why "*Floating-point overflow occurred"
(cons (car math-normalize-a) args))
nil)
(math-underflow
(setq math-normalize-error t)
(calc-record-why "*Floating-point underflow occurred"
(cons (car math-normalize-a) args))
nil)
(void-variable
(setq math-normalize-error t)
(if (eq (nth 1 err) 'var-EvalRules)
(progn
(setq var-EvalRules nil)