Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IEEE 1788 conformance #67

Open
dpsanders opened this issue Oct 14, 2015 · 7 comments
Open

IEEE 1788 conformance #67

dpsanders opened this issue Oct 14, 2015 · 7 comments

Comments

@dpsanders
Copy link
Member

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

@lbenet
Copy link
Member

lbenet commented Oct 14, 2015

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"):

  • Basic operations: neg (-), add (+), sub (-), mul (*), div (/), recip (inv in Julia), sqr, sqrt, fma; #56

EDIT: -[ ] Case function: case

  • Power functions: pown (^), pow (^), exp, exp2, exp10, log, log2, log10. Partially implemented in #56.
    EDIT: Needed: exp2, exp10, log2, log10. (Maybe some metaprogramming is useful here.) See Add functions to get compatibility with IEEE 1788 #68, 095a0b0
  • Trigonometric/hyperbolic functions: sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, asinh, acosh, atanh. Almost totally implemented in #56 and #63.
    EDIT: Needed: atan2 See Add functions to get compatibility with IEEE 1788 #68, a308fe3
  • Integer functions: sign, ceil, floor, trunc, roundTiesToEven (round(a, RoundTiesToEven)), roundTiesToAway (round(a, RoundTiesToAway)). Almost totally implemented in #56.
    EDIT: Needed: roundTiesToEven and roundTiesToAway remain to be implemented. See Add functions to get compatibility with IEEE 1788 #68, bbe9938
  • Absmax functions: abs, min, max; #56
  • Cancel functions: cancelPlus and cancelMinus
    EDIT: See Add functions to get compatibility with IEEE 1788 #68, bbe9938
  • Set operations: intersection (intersect, ), convexHull (hull)
  • Constructors: 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.
  • Numeric functions: inf (infimum), sup (supremum), mid, wid (diam), rad (radius), mag, mig; completed in #56
  • Boolean functions: equal (==), subset (issubset, ), interior (also as ), disjoint (isdisjoint)
  • Reverse-mode operations (page 37 of the Standard): 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:

  • Incorporate decorations. This could be done by modifying the constructor for 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.
  • Formalize the possibility to work in the center-radius form; this is quite helpful for dealing with the multidimensional case. Related to #61 and #39

@dpsanders
Copy link
Member Author

Great list, thanks!

@lbenet
Copy link
Member

lbenet commented Oct 14, 2015

I forgot to include in the list that for full conformance, lots of things (typically related to rounding) have to be documented.

@dpsanders
Copy link
Member Author

@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.

@lbenet
Copy link
Member

lbenet commented Nov 1, 2015

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.

@lbenet
Copy link
Member

lbenet commented Nov 1, 2015

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.

@dpsanders
Copy link
Member Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants