Thread Links | Date Links | ||||
---|---|---|---|---|---|
Thread Prev | Thread Next | Thread Index | Date Prev | Date Next | Date Index |
Arnold Neumaier schrieb:
Vincent Lefevre schrieb:On 2009-09-01 14:00:14 -0400, Nate Hayes wrote:Arnold Neumaier wrote:Yes, but this requires global/local flags, which I think are to be avoidedCorrect is the following code, which uses Section 3.4 of the Vienna proposal that must be considered whenever existence statements are made (also in existence from an interval Newton operator): if isEmpty(f(X')) delete X' else if inf(f(X')) > 0 delete X' else if PossiblyUndefined bisect or save X' else if f(X') <= 0 accept X' else bisect or save X'in data-parallel computing environments. In the context of this type ofalgorithm, the interval result is of no use when PossiblyUndefined is set, anyways. So it is better to return a "PossiblyUndefined" (or in some casesperhaps a "TotallyUndefined") NaI instead.One could also have a flag attached to the returned interval. Alternatively, one could have a function telling whether X' is included in the domain of f.The latter can in general be found out only by evaluating; so this would double the work whenever one needs both the evaluation and the domain check.Producing NaI in such a situation also wastes information available, since one can no longer check for the first two casesin the above piece of code. If flags are to be avoided, flag-raising operations should return two results: the range enclosure and a byte encoding all relevant flags. In this way, the compiler can decide whether it wants to exploit the flag byte, ignoring or using it as required by an algorithm. One one only needs to have the compiler provide different constructs, e.g., y=sqrt(x) for the ``ignore flags'' mode, (y,flagbyte)=sqrt(x) for the ``use flag'' mode, both interpreted at the implementation level via the second construct. This is very easy to use, and easily parallelizes. The PossiblyUndefined would then be a result of the function evaluation algorithm rather than one of the underlying interval arithmetic. This even has the advantage that a user can skip further operations in cases that a flag makes superfluous the remaining part of a computation.The same technique also works in all other cases where the Vienna proposal recommended the use of flags.Arnold Neumaier
We used two different types in a C++ test-implementation.An Interval and a type called ExpressionResult. The ExpressionResult keeps an interval together with some flags.
For further details see the attached paper for the proceedings of SCAN08 (joint work with J. Wolff v. Gudenberg)
-- o Marco Nehmeier, Lehrstuhl fuer Informatik II / \ Universitaet Wuerzburg, Am Hubland, D-97074 Wuerzburg InfoII o Tel.: +49 931 / 31 88684 / \ Uni E-Mail: nehmeier@xxxxxxxxxxxxxxxxxxxxxxxxxxx o o Wuerzburg
Attachment:
article.pdf
Description: Adobe PDF document