Show HN: I made a calculator that works over disjoint sets of intervals

(victorpoughon.github.io)

93 points | by fouronnes3 5 hours ago

5 comments

  • fouronnes3 5 hours ago
    Author here. Outward rounding to combat precision issues is what interval arithmetic is most known for (try 0.1+0.2 with "full precision mode" enabled), but that's really a shame in my opinion. Outward rounding is cool, but the "inclusion property", as it's known in research papers, works at every scale! This is what enables things like:

         50 * (10 + [-1, 1])
        [450, 550]
    
    which is lovely, I think. Adding the union layer to it enables even cooler things, like the true inverse of the square function. Did you know it's not sqrt? Try 'sqinv(64)'.

    I made interval calculator actually mostly as a way to test my implementation of interval union arithmetic [0], which I needed for another project: a backwards updating spreadsheet [1][2].

    [0] https://github.com/victorpoughon/not-so-float

    [1] https://victorpoughon.github.io/bidicalc/

    [2] https://news.ycombinator.com/item?id=46234734

  • iamwil 1 hour ago
    This is great. You might be interested in Matt Keeter's work on Implicit surfaces, and using interval math for its optimization:

    https://youtu.be/UxGxsGnbyJ4?si=Oo6Lmc4ACaSr5Dk6&t=1006

  • _Microft 1 hour ago
    Very nice, thanks for sharing! Maybe show which upper or lower values are included in the intervals? A notation I am familiar with uses outward facing brackets if the value is not included in the interval. That always applies to infinity.

    Applied to the cases here:

    ]-∞, -1] U [0.5, +∞[

    The excluded interval in between becomes ]-1, 0.5[ then.

    That’s how min (and analogously max) works, right? min(A, B) = [lo(A,B), lo (hi(A), hi(B))].

    Edit: idea: copy a formula from the results section to the input field if the user clicks/taps on it.

    • fouronnes3 10 minutes ago
      It's possible to support that but it makes the code very very much more complicated. I've decided early on to not support it. Would be a cool addition though!
    • adito 16 minutes ago
      From reading the linked paper[0], It explains closed interval only. "An interval union is a set of closed and disjoint intervals where the bounds of the extreme interval can be ±∞".

      [0]: https://www.ime.usp.br/~montanhe/unions.pdf

    • globular-toast 34 minutes ago
      I was also a bit confused by this. I thought the standard notation was round brackets, but maybe doesn't work well in ASCII?
  • memalign 1 hour ago
    You might be interested in this graphing calculator I made using interval arithmetic:

    https://memalign.github.io/m/formulagraph/index.html

    Some detail on how this works, including links to the relevant interval math code:

    https://memalign.github.io/p/formulagraph.html

  • anematode 18 minutes ago
    Excellent!! I love interval arithmetic and also wrote a TS implementation for a graphing calculator project. Agree that it's very underrated, and I wish that directed rounding was exposed in more languages.