This application of interval analysis for numeric
sub-type determination
at compile time seems to me to be rather different
from computation
with intervals, as is done by Mathematica ( using
Interval[{a,b }].)
There may be more of a relationship than I see right
here, but
I think the primary use of this CMU stuff is to
determine when possible
that (sqrt x) will return a [real] double-float
and not a complex number.
RJF
----- Original Message -----
From: Raymond Toy <raymond.toy at ericsson.com>
Date: Thursday, May 4, 2006 2:15 pm
Subject: Re: [Maxima] Re: Interval Arithmetic project
> >>>>> "Raymond" == Raymond Rogers <Rogers> writes:
>
> Raymond> I have "Interval Methods for Circuit
Analysis" by L V
> Kolev. I think it's
> Raymond> a good book. Of course it is dealing
with circuit
> tolerances rather than
> Raymond> floating point calculation errors.
>
> Raymond> But interval analysis is limited.
> Raymond> When you enter an equation for
Interval Analysis each
> calculation is
> Raymond> independent; two different 10 ohm
resistors have
> different values. Now in a
> Raymond> lot of circuit cases (parameters of
linear equations)
> you can accomplish
> Raymond> isolation of part calculations; but
consider (my case)
> Raymond> int((x+a)/(x+b)),x=[c,d]) , you can't
determine the
> answer by straight
> Raymond> forward interval analysis since the
maximum could be
> at an intermediate
> Raymond> value of v (say x=-b), and "interval
analysis" is
> really endpoint analysis.
>
> (defun foo (x)
> (declare (type (double-float 9.5d0 10.5d0) x))
> (/ (+ x 20) (+ x 10)))
>
> With cmucl, if you (compile 'foo) and then
(describe 'foo), you
> get:
>
> Its result type is:
> (DOUBLE-FLOAT 1.4390243902439024d0
1.564102564102564d0)
>
> That is, (x+20)/(x+10) is always between 1.439...
and 1.564... if x is
> [9.5,10.5]. I think that's right.
>
> Substitute your favorite values for a and b. Or
you could even do
>
> (defun foo2 (x a b)
> (declare (type (double-float 9.5d0 10.5d0) x)
> (type (double-float 19d0 21d0) a)
> (type (double-float 9.9d0 10.1d0) b))
> (/ (+ x a) (+ x b)))
>
> CMUCL will tell you that the result is always in
the interval
> [1.383..., 1.6237...]
>
> CMUCL isn't perfect here. Round-off may very well
cause the answers
> to be incorrect.
>
> I don't quite understand your comment.
>
> Ray
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>