[Jprogramming] Integer-floating type change for large numbers in j805 and j806
Bill
bbill.lam at gmail.com
Fri Aug 11 01:27:03 UTC 2017
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 <henryhrich at gmail.com> wrote:
> Quite right.
>
> Henry Rich
>
> On Aug 9, 2017 20:46, "Raul Miller" <rauldmiller at gmail.com> 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 <henryhrich at gmail.com> wrote:
>>> Surely integer 999...9 is a better value than 1000...0 .
>>>
>>> Henry Rich
>>>
>>> On Aug 9, 2017 18:33, "Raul Miller" <rauldmiller at gmail.com> 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 <henryhrich at gmail.com>
>> 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" <bbill.lam at gmail.com> 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 <
>>>>> programming at jsoftware.com> 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 <bobtherriault at mac.com>
>>>>>>> To: Programming forum <programming at jsoftware.com>
>>>>>>> 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
More information about the Programming
mailing list