Open dpsanders opened 8 years ago
The following is a list of required functions to be IEEE 1788 conforming, following Nehmeier's paper (cf. sect. II.C.1, "Required operations for all flavours"):
neg
(-
), add
(+
), sub
(-
), mul
(*
), div
(/
), recip
(inv
in Julia), sqr
, sqrt
, fma
; #56EDIT: -[ ] Case function: case
pown
(^
), pow
(^
), exp
, exp2
, exp10
, log
, log2
, log10
. Partially implemented in #56.
EDIT: exp2
, exp10
, log2
, log10
. (Maybe some metaprogramming is useful here.)sin
, cos
, tan
, asin
, acos
, atan
, atan2
, sinh
, cosh
, tanh
, asinh
, acosh
, atanh
. Almost totally implemented in #56 and #63.
EDIT: atan2
sign
, ceil
, floor
, trunc
, roundTiesToEven
(round(a, RoundTiesToEven)
), roundTiesToAway
(round(a, RoundTiesToAway)
). Almost totally implemented in #56.
EDIT: roundTiesToEven
and roundTiesToAway
remain to be implemented.abs
, min
, max
; #56 cancelPlus
and cancelMinus
EDIT: See #68, https://github.com/dpsanders/ValidatedNumerics.jl/commit/bbe99385df6e634f3e681d1f955bd782f3bfd5d7intersection
(intersect
, ∩
), convexHull
(hull
)numsToInterval
(Interval
and @interval
), textToInterval
(only @interval
). NOTE: currently we allow the construction of intervals for the case where the limits are not correctly passed (first entry larger than the second); this is not quite conforming with the standard and could lead to rounding issues. Turning off this and throwing an error instead, has no consequences for the ITF1788-elem tests, but the corresponding tests we implemented obviously fail.inf
(infimum
), sup
(supremum
), mid
, wid
(diam
), rad
(radius
), mag
, mig
; completed in #56equal
(==
), subset
(issubset
, ⊆
), interior
(also as ⪽
), disjoint
(isdisjoint
)sqrRev
, absRev
, pownRev
, sinRev
, cosRev
, tanRev
, coshRev
, mulRev
, powRev1
, powRev2
, atan2Rev1
, atan2Rev2
(I have worked a little bit in what remains to be done, but haven't pushed it yet.)
Aside from these points, I have implemented some of the operations required in the set based flavor, but many other are needed. Among those, we lack the reverse mode functionality, some elementary functions, the slope functions, overlap, and complete arithmetic operations (see section II.C.2). Note that we have some ad hoc implementation of divToPair
in newton
, but it is worth to convert it into a function.
In addition, in my opinion we should:
Interval
, including a field dec
, and include a boolean parameter in interval_parameters
that defines to follow them or not. i can foresee complications for @interval
. Another possibility is to use a specialized constructor.Great list, thanks!
I forgot to include in the list that for full conformance, lots of things (typically related to rounding) have to be documented.
@lbenet There is a list of required reverse-mode functions on page 37 of the Standard that seems to be missing. I have added them to the above list.
It's true that there are the reverse mode functions. If I recall correctly, this are related to one (specific) documented flavor, but it is not required for all flavors. In any case, it is worth to include those functions.
Maybe you should open another issue on this.
I just noticed that there is an entry on the list in #65 precisely on this. It is the last item of what is required.
Reverse mode functions is now issue #119
We can now input 1D intervals in midpoint-radius representation, and output them in that representation. Multi-dimensional midpoint-radius is a very different direction.
It would be very useful to have a check list of functions that still need to be implemented for conformance with the IEEE 1788 standard for interval arithmetic.
Cc @lbenet