Yes.
(14^2)|!.0 [ 5729082486784839
147
/Erling
Den 2017-09-13 kl. 15:25, skrev Don Guinn:
That is true, but the problem is not in J, but in IEEE as it cannot
represent that number exactly in float double. Before 64 bit integers came
out all integers were included exactly in float double. So converting
integer to float never caused a loss in precision. Now it does.
2^.57290824867848391
55.6692
0j0":{.57290824867848391 0.5
57290824867848392
When things are pushed to their limits and possibly beyond, strange things
happen. Comparison tolerance address many problems that bite other
programming languages, but it's not perfect. That decimal numbers with
fractional values cannot be represented exactly in binary computers causes
a lot of grief in all programming languages.
I'm just relieved to understand the problem and that it is easy to get
around up to the limits of IEEE float double.
On Wed, Sep 13, 2017 at 7:06 AM, Erling Hellenäs <[email protected]>
wrote:
So, the perceived problem is related to comparison tolerance. The question
is then how it is used and if this use is rational?
With comparison tolerance at 0, when we add another digit, we get a new
incorrect result, now related to lost precision?
9!:19]0
196x|57290824867848391x
99
({.196 0.5)|57290824867848391
104
Cheers,
Erling
Den 2017-09-13 kl. 14:38, skrev Don Guinn:
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/forum
s.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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm