• 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

    • _Microft 26 minutes 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))]

      • iamwil an 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

        • memalign an 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