I suspect J interpreter didn't has the knowledge that the original string had been 9999999999999999.3 with .3 because what J saw was the floating point result of parsing by c library. Ieee floating point has 15 to 16 significant digits so that 1e16 and 1e16-1 is the same number.
Perhaps one could use long double to parse number on J64. Sent from my iPhone On 10 Aug, 2017, at 3:48 AM, Henry Rich <[email protected]> wrote: > Quite right. > > Henry Rich > > On Aug 9, 2017 20:46, "Raul Miller" <[email protected]> wrote: > >> Well, since it's encoded as an integer (which I would have noticed if >> I had read Bob Therriault's original post more closely), and not [like >> I was thinking] a float, I agree that dropping the .3 is better than >> adding a 1. >> >> That said, I guess we also should not object too loudly if >> 9999999999999999.3 were instead encoded the same as >> 9999999999999999+0.3 gets encoded. >> >> Thanks, >> >> -- >> Raul >> >> On Wed, Aug 9, 2017 at 3:25 PM, Henry Rich <[email protected]> wrote: >>> Surely integer 999...9 is a better value than 1000...0 . >>> >>> Henry Rich >>> >>> On Aug 9, 2017 18:33, "Raul Miller" <[email protected]> wrote: >>> >>>> It's not a bug, it's an artifact of the 64 bit floating point standard. >>>> >>>> 2 ^.9999999999999999 >>>> 53.1508 >>>> >>>> https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats >>>> >>>> The binary64 format has 53 binary digits or 15.95 decimal digits. This >>>> means ".16#'9' cannot be represented exactly using this format. >>>> >>>> And, we do not use exact representation of large numbers by default >>>> because that's too slow for large datasets. Put differently, if you >>>> want exact representation and are willing to take the performance hit, >>>> you should specify that. For example: ".'x',~16#'9' or >>>> ".'3r10+','x',~16#'9' >>>> >>>> Thanks, >>>> >>>> -- >>>> Raul >>>> >>>> On Wed, Aug 9, 2017 at 12:05 PM, Henry Rich <[email protected]> >> wrote: >>>>> This is a bug, since 999...9.3 should become 999...9 rather than >>>> 100...0. >>>>> I'm away from home now, but I think what's happening is this: >>>>> >>>>> 999...9 is converted to integer >>>>> >>>>> . is encountered and turns it to float >>>>> >>>>> It's rounded to the nearest float which is 100...0 >>>>> >>>>> As a final step the JE checks to see if the value is exactly integral, >>>>> which it is, and it is converted back to integer. >>>>> >>>>> If you add this to Interpreter/Bugs I'll fix it when i get back. >>>>> >>>>> Henry Rich >>>>> >>>>> On Aug 9, 2017 16:16, "bill lam" <[email protected]> wrote: >>>>> >>>>> I think this is the difference between 32 and 64-bit, >>>>> >>>>> 9!:14'' >>>>> j602/2008-03-03/16:45 >>>>> 3!:0[ 9999999999999999.3 >>>>> 4 >>>>> >>>>> In J32 >>>>> >>>>> a.i. 2 fc 9999999999999999.3 >>>>> 0 128 224 55 121 195 65 67 >>>>> a.i. 2 fc 1e16 >>>>> 0 128 224 55 121 195 65 67 >>>>> >>>>> the number has the same bit pattern as 1e16 (an integer) >>>>> which can be represented as a 64-bit integer. I guess >>>>> J64 is correct since 9999999999999999.3 and 1e16 is the >>>>> same number in ieee fp and J prefers integer to floats, >>>>> eg >>>>> 3!:0 [ 2.0 >>>>> 4 >>>>> >>>>> Ср, 09 авг 2017, robert therriault написал(а): >>>>>> Hi Pascal, >>>>>> >>>>>> I see the same behaviour in j806 as j805. Do you see something >>>> different? >>>>>> >>>>>> JVERSION >>>>>> Engine: j806/j64avx/darwin >>>>>> Beta-4: commercial/2017-06-27T12:55:06 >>>>>> Library: 8.06.03 >>>>>> Qt IDE: 1.5.3/5.6.2 >>>>>> Platform: Darwin 64 >>>>>> Installer: J806 install >>>>>> InstallPath: /users/bobtherriault/j64-806 >>>>>> Contact: www.jsoftware.com >>>>>> (; datatype) 999999999999999.3 >>>>>> ┌────┬────────┐ >>>>>> │1e15│floating│ >>>>>> └────┴────────┘ >>>>>> (; datatype) 9999999999999999.3 >>>>>> ┌─────────────────┬───────┐ >>>>>> │10000000000000000│integer│ >>>>>> └─────────────────┴───────┘ >>>>>> (; datatype) 99999999999999999.3 >>>>>> ┌──────────────────┬───────┐ >>>>>> │100000000000000000│integer│ >>>>>> └──────────────────┴───────┘ >>>>>> (; datatype) 999999999999999999.3 >>>>>> ┌───────────────────┬───────┐ >>>>>> │1000000000000000000│integer│ >>>>>> └───────────────────┴───────┘ >>>>>> (; datatype) 9999999999999999999.3 >>>>>> ┌────┬────────┐ >>>>>> │1e19│floating│ >>>>>> └────┴────────┘ >>>>>> >>>>>> Cheers, bob >>>>>> >>>>>>> On Aug 9, 2017, at 7:54 AM, 'Pascal Jasmin' via Programming < >>>>> [email protected]> wrote: >>>>>>> >>>>>>> in j806, 9999999999999999.310000000000000000 probably the j805 >>>>> behaviour is preferred. If only for consistency. But there may be a >>>> good >>>>> reason for change. >>>>>>> >>>>>>> From: robert therriault <[email protected]> >>>>>>> To: Programming forum <[email protected]> >>>>>>> Sent: Wednesday, August 9, 2017 10:40 AM >>>>>>> Subject: [Jprogramming] Integer-floating type change for large >> numbers >>>>> in j805 and j806 >>>>>>> >>>>>>> I am guessing that the following has something to do with >> precision of >>>>> large numbers in j805 and is also true for j806. >>>>>>> >>>>>>> (; datatype) 999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e15│floating│ >>>>>>> └────┴────────┘ >>>>>>> (; datatype) 9999999999999999.3 >>>>>>> ┌─────────────────┬───────┐ >>>>>>> │10000000000000000│integer│ >>>>>>> └─────────────────┴───────┘ >>>>>>> (; datatype) 99999999999999999.3 >>>>>>> ┌──────────────────┬───────┐ >>>>>>> │100000000000000000│integer│ >>>>>>> └──────────────────┴───────┘ >>>>>>> (; datatype) 999999999999999999.3 >>>>>>> ┌───────────────────┬───────┐ >>>>>>> │1000000000000000000│integer│ >>>>>>> └───────────────────┴───────┘ >>>>>>> (; datatype) 9999999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e19│floating│ >>>>>>> └────┴────────┘ >>>>>>> JVERSION >>>>>>> Engine: j805/j64/darwin >>>>>>> Release: commercial/2016-12-11T08:17:56 >>>>>>> Library: 8.05.14 >>>>>>> Qt IDE: 1.5.4/5.6.2 >>>>>>> Platform: Darwin 64 >>>>>>> Installer: J805 install >>>>>>> InstallPath: /applications/j64-805 >>>>>>> Contact: www.jsoftware.com >>>>>>> >>>>>>> Further investigation shows me it was not this way with the 32 bit >>>>> version of j701, so it may be an artifact of moving to 64 bit? >>>>>>> >>>>>>> (; datatype) 999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e15│floating│ >>>>>>> └────┴────────┘ >>>>>>> (; datatype) 9999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e16│floating│ >>>>>>> └────┴────────┘ >>>>>>> (; datatype) 999999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e18│floating│ >>>>>>> └────┴────────┘ >>>>>>> (; datatype) 9999999999999999999.3 >>>>>>> ┌────┬────────┐ >>>>>>> │1e19│floating│ >>>>>>> └────┴────────┘ >>>>>>> JVERSION >>>>>>> Engine: j701/2011-01-10/11:25 >>>>>>> Library: 7.01.088 >>>>>>> Platform: Darwin 32 >>>>>>> Installer: j701a_mac_intel.dmg >>>>>>> InstallPath: /Applications/j701 >>>>>>> >>>>>>> Cheers, bob >>>>>>> >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------ >>>> ---------- >>>>>>> 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 >>>>> >>>>> -- >>>>> regards, >>>>> ==================================================== >>>>> GPG key 1024D/4434BAB3 2008-08-24 >>>>> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3 >>>>> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3 >>>>> ------------------------------------------------------------ >> ---------- >>>>> 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 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
