Oh, duh...
({.196 0.5)|5729082486784839
0
({.196 0.5)(|!.0)5729082486784839
147
There might be hints of this in the dictionary:
http://www.jsoftware.com/help/dictionary/d230.htm
... but I'm not seeing them.
For example:
(%3)|(2%3)
0
(%3)|!.0(2%3)
0
So there's still something here which does not make sense...
Thanks,
--
Raul
On Wed, Sep 13, 2017 at 8:38 AM, Don Guinn <[email protected]> wrote:
> I think I found the culprit.
>
> ({.196 0.5)|5729082486784839
> 0
> 9!:18''
> 5.68434e_14
> 2^.9!:18''
> _44
> 9!:19]0
>
> ({.196 0.5)|5729082486784839
> 147
> 9!:19]5.68434e_15
>
> ({.196 0.5)|5729082486784839
> 147
> ({.196 0.5)|57290824867848391
> 0
> 9!:19]5.68434e_16
>
> ({.196 0.5)|57290824867848391
> 104
>
> On Tue, Sep 12, 2017 at 4:57 PM, Raul Miller <[email protected]> wrote:
>
>> R2=: |
>> R1=: (] - [ * [: <.!.0 ] % [)"0
>> R0=: (|&x:)"0
>>
>> (14^2) R1 5729082486784839
>> 147
>> (14^2) R2 5729082486784839
>> 0
>>
>> X=: (0.1-0.1)+i.1000
>> Y=: 5729082486784839+i:1000
>>
>> datatype X
>> floating
>>
>> +/,X (R0/ ~: R2/) Y
>> 1845046
>> +/,X (R0/ ~: R1/) Y
>> 0
>>
>> Good question.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>> On Tue, Sep 12, 2017 at 4:26 AM, Erling Hellenäs
>> <[email protected]> wrote:
>> > Residue1=: ] - [ * [: <.!.0 ] % [
>> >
>> > Residue2=: |
>> >
>> > (14^2) Residue1 5729082486784839
>> >
>> > 147
>> >
>> > (14^2) Residue2 5729082486784839
>> >
>> > 0
>> >
>> > Why is Residue2 losing precision when Residue1 is not?
>> >
>> > /Erling
>> >
>> >
>> >
>> > Den 2017-09-12 kl. 02:04, skrev Don Kelly:
>> >>
>> >> I believe that Raul has hit it on the head. 14^2 will be floating as
>> will
>> >> generally be the case with % so it is possible that errors add or
>> subtract
>> >> to give an erroneous result. Note that
>> >>
>> >> (14^2) (] - [ * [: <. ] % [)5729082486784839x
>> >>
>> >> 147
>> >>
>> >>
>> >> (14^2x) (] - [ * [: <. ] % [)5729082486784839
>> >>
>> >> 147
>> >>
>> >> and
>> >>
>> >> (14^2x)|5729082486784839
>> >>
>> >> 147
>> >>
>> >>
>> >> does it more simply
>> >>
>> >>
>> >> Don
>> >>
>> >> On 2017-09-11 6:50 AM, Erling Hellenäs wrote:
>> >>>
>> >>> (14^2x) (] - [ * [: <. ] % [)5729082486784839x
>> >>>
>> >>> 147
>> >>>
>> >>> (14^2) (] - [ * [: <. ] % [)5729082486784839
>> >>>
>> >>> _49
>> >>>
>> >>> (14^2) (] - [ * _1 + [: <. ] % [)5729082486784839
>> >>>
>> >>> 147
>> >>>
>> >>> /Erling
>> >>>
>> >>>
>> >>> Den 2017-09-11 kl. 15:40, skrev Erling Hellenäs:
>> >>>>
>> >>>> From what I see, floor gives an incorrect result which I correct with
>> >>>> the " _1 + " There is not other problem. No loss of precision. /Erling
>> >>>>
>> >>>>
>> >>>> Den 2017-09-11 kl. 15:27, skrev Raul Miller:
>> >>>>>
>> >>>>> I do not know what you are thinking, and you have not illustrated
>> your
>> >>>>> thoughts sufficiently for me to grasp them.
>> >>>>>
>> >>>>> So, I thought I'd work through this:
>> >>>>>
>> >>>>> (14^2) (] - [ * _1 + [: <. ] % [)5729082486784839
>> >>>>> 147
>> >>>>> (14^2x) (] - [ * _1 + [: <. ] % [)5729082486784839x
>> >>>>> 343
>> >>>>>
>> >>>>> Clearly, the exact answer is different from the quick answer.
>> >>>>>
>> >>>>> If we compare
>> >>>>> load'debug/dissect'
>> >>>>> dissect '(14^2) (] - [ * _1 + [: <. ] % [)5729082486784839'
>> >>>>> dissect '(14^2x) (] - [ * _1 + [: <. ] % [)5729082486784839x'
>> >>>>>
>> >>>>> We can see the initial off-by-one errors, but the big difference
>> shows
>> >>>>> up at the end (where we subtract from 5729082486784839)
>> >>>>>
>> >>>>> The value we are subtracting is:
>> >>>>>
>> >>>>> (14^2x) ([ * _1 + [: <. ] % [)5729082486784839x
>> >>>>> 5729082486784496
>> >>>>> (14^2) ([ * _1 + [: <. ] % [)5729082486784839
>> >>>>> 5.72908e15
>> >>>>>
>> >>>>> Looking at the bits needed to represent that as an integer:
>> >>>>>
>> >>>>> 2^.(14^2) ([ * _1 + [: <. ] % [)5729082486784839
>> >>>>> 52.3472
>> >>>>>
>> >>>>> we can see that that's right on the edge of being the number of
>> >>>>> representable digits in a 64 bit float.
>> >>>>>
>> >>>>> But, also, it's the result of multiplying
>> >>>>>
>> >>>>> 14^2
>> >>>>> 196
>> >>>>>
>> >>>>> by an off-by-one amount. And...
>> >>>>>
>> >>>>> 343-196
>> >>>>> 147
>> >>>>>
>> >>>>> ...
>> >>>>>
>> >>>>> Anyways, I'm not sure what you were thinking, but I guess we can take
>> >>>>> this as a good example of the idea that errors can actually
>> >>>>> accumulate.
>> >>>>>
>> >>>>> Thanks,
>> >>>>>
>> >>>>
>> >>>> ------------------------------------------------------------
>> ----------
>> >>>> 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