Hi, I was curious how J's cousin, APL, deals with this. So I used Dyalog APL (Version: 15.0.27982.0 64 Unicode) and got a surprising result:
⍪(¯4 ¯3 ¯2 ¯1 0 1 2 3 4+14*2) | 5729082486784839 0 0 0 0 0 104 0 113 0 Changing from IEE-754 64-bit to IEE-754-2008 128-bit floating point representation corrects the problem ⎕FR 645 ⎕FR←1287 ⍪(¯4 ¯3 ¯2 ¯1 0 1 2 3 4+14*2) | 5729082486784839 135 146 23 39 147 104 171 113 39 Jimmy PS I guess a manual for beginners should have some sort of warning paragraph/blurb about the perils of numerical computations (and the good habits of verifying our results just like we were taught in elementary school). PPS for history buffs Back in the older days, Burroughs computer had modulo-3 checking of arithmetic operations http://bitsavers.trailing-edge.com/pdf/burroughs/BSP/ BSP_Floating_Point_Processor.pdf http://www.acsel-lab.com/arithmetic/arith4/papers/ARITH4_Gajski.pdf On Fri, Sep 8, 2017 at 9:21 AM, Erling Hellenäs <erl...@erlinghellenas.se> wrote: > Hi all ! > > It seems an IEEE double can hold this value without lost precision. I > don't know what might happen in the calculations. Where the precision is > lost. Maybe something with comparison tolerance. > > 5729082486784839 - 5729082486784839 - 0.999 > > 1 > > > JWithATwist does not lose precision. Here with integer and float right > argument. > > > { ( 14 ^ 2 ) {! ] - [ * |<. ] % [ } 1.0 * 5729082486784839 } > 147 > { ( 14 ^ 2 ) {! ] - [ * |<. ] % [ } 5729082486784839 } > 147 > > > Cheers, > > > Erling Hellenäs > > > > Den 2017-09-08 kl. 13:19, skrev Erling Hellenäs: > >> Case 3 seems to be working in the latest Beta(8.06.03). The problem seems >> to be solved. /Erling >> >> 3!:0 (x: n^2) >> >> 128 >> >> (x: n^2) | 5729082486784839 >> >> 147 >> >> 3!:0 (x: n^2) >> >> 128 >> >> >> Den 2017-09-07 kl. 20:40, skrev Erling Hellenäs: >> >>> 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