Note that unums are limited precision also, and have their own edge cases. Thanks,
-- Raul On Fri, Sep 8, 2017 at 3:25 AM, Skip Cave <s...@caveconsulting.com> wrote: > The basic problem here is the limits of the IEEE-754 floating point > representation. When you are computing with numbers that are near the max > or min values of the range of numbers representable in the IEEE format, > strange things can happen. Over the years, programmers have learned to live > with this problem, and they have devised various workarounds: switch from > 32-bit to 64-bit precision (128 bit?), or use something like J's extended > precision (slow, but more accurate.). > > John Gustafson, a computer scientist (https://goo.gl/W5T5Gd), got fed up > with this problem and proposed a fix for the IEEE 754 limitations in his > book, which is rather confidently named "The End of Error" ( > https://goo.gl/t5AZ1k). The primary goal of the new number format, which > John called "unums" (for universal numbers) was to minimize the probability > of error in computations, while maintaining some compatibility with the > IEEE-754 standard. Probably more important, by incorporating the concepts > of interval arithmetic, the unum format provided the capability for the > programmer to know when the result of a computation was imprecise, and even > know the boundaries of the impreciseness. > > Gustafson's book caused a bit of a stir in the computer world, particularly > from William Kahan, the principal architect of IEEE 754 standard. Gustafson > and Kahan debated the issues in a recorded presentation ( > https://goo.gl/bkU3ab). Responding to Kahan's criticism, Gustafson proposed > Unum 2.0, which discards the attempts at IEEE 754 compatibility by using > variable-length words. (https://goo.gl/JwCEsY) This improved storage > efficiency and accuracy, but complicated the hardware design. > > Recently John and Isaac Yonemoto proposed yet another tweak on John's unum > ideas in their new paper, again rather confidently titled "Beating Floating > Point at its Own Game: Posit Arithmetic" https://goo.gl/Gpvm9q. They call > this number format Unum Type 3, which is more hardware-friendly, as it > eliminates variable-length words. In the paper, John & Isaac give a nice > overview of the unum development path that was taken through unums type 1, > 2, and 3. > > Like J, Gustafson he tends to repurpose English words for unum's concepts. > There are two types of results in type 3 unums: "posits" and "valids". You > should read the paper to understand these concepts. > > Gustafson has made a significant attempt to solve the problem that Rob > encountered, and which programmers have learned to live with since the > beginning of electronic computers. However, the IEEE 754 standard is > currently ubiquitous, and it will take a long time (if ever) to unseat it. > > Roger Stokes has provided a learning lab for unum 2.0 in the J language. > The discussion about this lab is in the J Programming forum archives at: > https://goo.gl/qDQ9vC > > There is a Conference for Next Generation Arithmetic scheduled in Singapore > next year https://posithub.org/ where these issues will be discussed. > > In any case, running on a computer using something like Gustafson's unums > would likely have prevented the problem Rob encountered. > > Skip > > > Skip Cave > Cave Consulting LLC > > On Thu, Sep 7, 2017 at 8:19 PM, Don Kelly <d...@shaw.ca> wrote: > >> Yet this works >> >> n=:14 >> >> (n^2x) |5729082486784839 >> >> 147 >> >> >> Don Kelly >> >> >> On 2017-09-07 11:40 AM, Erling Hellenäs wrote: >> >>> Hi all ! >>> >>> Case 1: >>> 3!:0 [ (n^2) >>> >>> 8 >>> >>> (n^2) | 5729082486784839 >>> >>> 0 >>> >>> It is non-intuitive that an integer raised to an integer is a float, but >>> I think it is normal. It would be possible with a performance penalty to >>> get an integer result. One problem with that is that it would easily >>> overflow. It would also be possible to have a special operation for this >>> case. >>> When the left argument is a float the right argument has to be converted >>> to a float. It must be assumed that this conversion is intentional, even >>> though it is implicit. >>> >>> Case 2: >>> 3!:0 [ (n^2) >>> >>> 8 >>> >>> (n^2) | 5729082486784839x >>> >>> 0 >>> >>> 3!:0 (n^2) | 5729082486784839x >>> >>> 8 >>> >>> Here the rational seems to be converted to a float and the result is >>> float. Shouldn't we have an error instead of converting rationals to float? >>> >>> Case 3: >>> >>> 3!:0 (x: n^2) >>> >>> 128 >>> >>> (x: n^2) | 5729082486784839 >>> >>> 0 >>> >>> 3!:0 (x: n^2) | 5729082486784839 >>> >>> 128 >>> >>> I have a hard time understanding what happens here. This result seems >>> very peculiar. Is the left and right argument converted to float and the >>> float result converted to rational?! >>> Shouldn't we have an error instead of converting rationals to float? >>> We could not have floats auto-converted to rationals? >>> In this case the integer should be converted to rational and we should >>> get a rational result? >>> >>> It is non-intuitive that (*: n) does not give the same result as (n^2). >>> Maybe once this was decided because of performance reasons. >>> >>> Cheers, >>> >>> Erling Hellenäs >>> >>> On 2017-09-05 18:41, Rob B wrote: >>> >>>> Could someone explain this please? >>>> >>>> n=.14 >>>> n >>>> 14 >>>> (*: n) | 5729082486784839 >>>> 147 >>>> 196 | 5729082486784839 >>>> 147 >>>> (n^2) | 5729082486784839 >>>> 0 >>>> (n^2) | 5729082486784839x >>>> 0 >>>> (x: n^2) | 5729082486784839 >>>> 0 >>>> (x: n^2) | 5729082486784839x >>>> 147 >>>> >>>> >>>> Regards, Rob Burns >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> >>> >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >> >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm