Hello Jürgen,
Web page http://www.gnu.org/software/apl/apl.html#Chapter-3 states Gnu
APL integers are 64-bit wide, thus ranging from -9223372036854775808 to
9223372036854775807.
As a naive user, I expect that to mean I can do accurate integer
addition and subtraction in the above stated range. My experience is
otherwise. In that range a calculation as simple as
Z ← 1 + V − V + 1
where V is a randomly generated, fails to return 0 about 99.8% of the
time. Changing the 1's to 100000 in above statement does not materially
change the results. The calculation still fails over 99% of the time.
Integer addition and subtraction is accurate in the 9007199254740991 to
-9007199254740992 range (which corresponds to 53 bits plus a sign bit).
An apl script file that demonstrates this issue is attached.
I respectfully submit that the documentation should reflect the
narrower range for integers until such time this issue is corrected.
Regards,
Fred
On Wed, 2014-03-12 at 13:24 +0100, Juergen Sauermann wrote:
Hi Elias,
thanks, fixed in SVN 162. In that range it can still happen that
"small" differences occur because an operation may be internally
performed as double and then converted to integer. The double has
48-1 bit precision and the integer 64-1 bit precision. It depends a
little
on how the actual operation is implemented.
/// Jürgen
On 03/11/2014 04:32 PM, Elias Mårtenson wrote:
Running ⎕SYL shows the following:
largest integer 9223372036854775807
Trying to subtract one from this value gives a weird result:
9223372036854775807-1
¯9223372036854775808
Regards,
Elias