Thread Links | Date Links | ||||
---|---|---|---|---|---|
Thread Prev | Thread Next | Thread Index | Date Prev | Date Next | Date Index |
Dominique Lohez wrote:
Ralph Baker Kearfott a écrit :On 07/04/2011 12:51 PM, Nate Hayes wrote:Dominique Lohez wrote:Nate Hayes a écrit :Dominique Lohez wrote:. . .If for example we have the interval extension P(X) = U(X) \union V(X) with U(X) = sqrt((|X| \intersect [roundDown(sqrt(a)),+Inf])^2-a) V(X) = -sqrt(a-(|X| \intersect [0,roundUp(a)]))If I encountered a function like Dan's, that is, if (abs(x) > sqrt(a)) y = sqrt(x^2-a); else y = - sqrt(a-x^2); end in a set of computations involving it, rather than programming it as above, I might, depending on priorities and relative importance, program it directly in terms of, say, truncated series, and supply the appropriate decoration upon return from my "user-supplied" function, so the arithmetic system would view it as an atomic operation. Would that lessen the burden on the requirements of a decoration scheme? In any case, many users may not have the luxury of going down such a route.Be careful. Before defining such a user-defined function you must insured that 1) The Interval expression is an straight-forward extension of your intended real expression 2) It satisfies the isotonicity requirement 3) It provides a decoration not best that the expected decoration IMHO the point 1 and 2 are better addressed using set operators
One thing I notice is if at Level 2 the function is implemented: U(X) = sqrt((|X| \intersect [roundUp(sqrt(a)),+Inf])^2-a) V(X) = -sqrt(a-(|X| \intersect [0,roundDown(sqrt(a))])^2) so that there is a 1 ULP gap between the domains of U(X) and V(X) at sqrt(a), then P(X) always gives a valid range enclosure and "continuous" decoration whenever sqrt(a) is an element of |X|. The reason this works is because the potential function is monotonic and continuous over the Level 2 interval [roundDown(sqrt(a)),roundUp(sqrt(a))], and any Level 2 |X| containing sqrt(a) will be a superset of this interval. However, this trick doesn't seem to work for implicit data types with dynamic precision, e.g., MPFR etc. Nate