Numeric error propagation: Difference between revisions
Content added Content deleted
(Add Common Lisp implementation.) |
m (Use symbols to make the code more readable.) |
||
Line 477: | Line 477: | ||
(format stream "~,2F ± ~,2F" (uncertain-number-value n) (uncertain-number-uncertainty n))) |
(format stream "~,2F ± ~,2F" (uncertain-number-value n) (uncertain-number-uncertainty n))) |
||
(defun |
(defun ~+ (n1 n2) |
||
(let* ((value1 (uncertain-number-value n1)) |
(let* ((value1 (uncertain-number-value n1)) |
||
(value2 (uncertain-number-value n2)) |
(value2 (uncertain-number-value n2)) |
||
Line 491: | Line 491: | ||
:uncertainty (uncertain-number-uncertainty n))) |
:uncertainty (uncertain-number-uncertainty n))) |
||
(defun |
(defun ~- (n1 n2) |
||
( |
(~+ n1 (negate n2))) |
||
(defun |
(defun ~* (n1 n2) |
||
(let* ((value1 (uncertain-number-value n1)) |
(let* ((value1 (uncertain-number-value n1)) |
||
(value2 (uncertain-number-value n2)) |
(value2 (uncertain-number-value n2)) |
||
Line 510: | Line 510: | ||
:uncertainty (uncertain-number-uncertainty n))) |
:uncertainty (uncertain-number-uncertainty n))) |
||
(defun |
(defun ~/ (n1 n2) |
||
( |
(~* n1 (inverse n2))) |
||
(defun |
(defun ~expt (base exp) |
||
(let* ((base-value (uncertain-number-value base)) |
(let* ((base-value (uncertain-number-value base)) |
||
(uncertainty-ratio (/ (uncertain-number-uncertainty base) base-value)) |
(uncertainty-ratio (/ (uncertain-number-uncertainty base) base-value)) |
||
Line 525: | Line 525: | ||
(x2 (make-uncertain-number :value 200 :uncertainty 2.2)) |
(x2 (make-uncertain-number :value 200 :uncertainty 2.2)) |
||
(y2 (make-uncertain-number :value 100 :uncertainty 2.3)) |
(y2 (make-uncertain-number :value 100 :uncertainty 2.3)) |
||
(d ( |
(d (~expt (~+ (~expt (~- x1 x2) 2) (~expt (~- y1 y2) 2)) |
||
1/2))) |
|||
1/2))) |
|||
(format t "d = ~A~%" d)))</lang> |
(format t "d = ~A~%" d)))</lang> |
||
{{out}} |
{{out}} |