Numeric error propagation: Difference between revisions

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

edits