Sure: I would expect that the values I've highlighted in red below should
all be zero. The other results are all OK as far as I know, though I
haven't scrutinised them carefully. I'm just saying that GNU APL doesn't
seem to be following this particular rule from the ISO standard: "If Z is A
, return zero."
⎕CT←0
A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
A∘.|A
0E0 ¯1E100 ¯1E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 ¯1E200 0E0 0E0
0E0 0E0 ¯1E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 ¯1E100 0E0 0E0
0E0 0E0 0E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 0E0 0E0 0E0
0E0 0E0 0E0 0E0 ¯1E¯200 0 0E0 0E0 0E0 0E0 0E0
0E0 0E0 0E0 0E0 0E0 0 0E0 0E0 0E0 0E0 0E0
¯1E200 ¯1E100 ¯1E0 ¯1E¯100 ¯1E¯200 0 1E¯200 1E¯100 1E0 1E100 1E200
0E0 0E0 0E0 0E0 0E0 0 0E0 0E0 0E0 0E0 0E0
0E0 0E0 0E0 0E0 0E0 0 1E¯200 0E0 0E0 0E0 0E0
0E0 0E0 0E0 0E0 0E0 0 1E¯200 1E¯100 0E0 0E0 0E0
0E0 0E0 1E100 0E0 0E0 0 1E¯200 1E¯100 1E0 0E0 0E0
0E0 0E0 1E200 0E0 0E0 0 1E¯200 1E¯100 1E0 1E100 0E0
Jay.
On 8 January 2018 at 21:13, Juergen Sauermann <[email protected]
> wrote:
> Hi Jay,
>
> I am still puzzled by the ISO description (and can't find the "IEEE
> standard for Binary Floating-Point Arithmetic (754)"
> referenced in the standard.
>
> Would you be able to provide the expected expected output of your example
> below?
>
> If I follow the ISO description of mod in the ISO APL standard word by
> word then I am getting pretty odd values at times.
>
> Best Regards,
> /// Jürgen
>
>
> On 01/08/2018 02:19 PM, Jay Foad wrote:
>
> Yes, thanks! Now, when ⎕CT=0 there are some odd results:
>
> ⎕CT←0
> A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
> A∘.|A
> 0E0 ¯1E100 ¯1E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 ¯1E200 0E0 0E0
> 0E0 0E0 ¯1E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 ¯1E100 0E0 0E0
> 0E0 0E0 0E0 ¯1E¯100 ¯1E¯200 0 0E0 0E0 0E0 0E0 0E0
> 0E0 0E0 0E0 0E0 ¯1E¯200 0 0E0 0E0 0E0 0E0 0E0
> 0E0 0E0 0E0 0E0 0E0 0 0E0 0E0 0E0 0E0 0E0
> ¯1E200 ¯1E100 ¯1E0 ¯1E¯100 ¯1E¯200 0 1E¯200 1E¯100 1E0 1E100 1E200
> 0E0 0E0 0E0 0E0 0E0 0 0E0 0E0 0E0 0E0 0E0
> 0E0 0E0 0E0 0E0 0E0 0 1E¯200 0E0 0E0 0E0 0E0
> 0E0 0E0 0E0 0E0 0E0 0 1E¯200 1E¯100 0E0 0E0 0E0
> 0E0 0E0 1E100 0E0 0E0 0 1E¯200 1E¯100 1E0 0E0 0E0
> 0E0 0E0 1E200 0E0 0E0 0 1E¯200 1E¯100 1E0 1E100 0E0
> 1e200|¯1
> 1E200
>
> The standard explicitly says that the result should never be the same as
> the (non-zero) left argument: "If Z is A , return zero."
>
> Jay.
>
> On 8 January 2018 at 12:26, Juergen Sauermann <
> [email protected]> wrote:
>
>> Hi Jay,
>>
>> maybe *SVN 1036* works better.
>>
>> /// Jürgen
>>
>>
>> On 01/08/2018 01:02 PM, Jay Foad wrote:
>>
>> Thanks. With r1035 I get:
>>
>> A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
>> A∘.|A
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> ¯1E200 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> ¯1E200 ¯1E100 ¯1 ¯1E¯100 ¯1E¯200 0 1E¯200 1E¯100 1 1E100 1E200
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>> 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>
>> One result stands out:
>>
>> ¯1E¯200|¯1E200
>> ¯1E200
>>
>> The result of A|B (with A non-zero) should be strictly smaller in
>> magnitude than A, so this seems very wrong.
>>
>> Jay.
>>
>>
>> On 8 January 2018 at 11:49, Juergen Sauermann <
>> [email protected]> wrote:
>>
>>> Hi Jay,
>>>
>>> thanks, fixed in *SVN 1035*.
>>>
>>> BTW tryapl.com gives this:
>>>
>>> * A←1E¯200 1E200 ¯1E¯200 ¯1E200*
>>>
>>> * A ∘.∣ A*
>>>
>>> *0 0 0 0
>>> 0 0 0 0
>>> 0 0 0 0
>>> 0 0 0 0*
>>> /// Jürgen
>>>
>>>
>>>
>>> TOn 01/08/2018 10:29 AM, Jay Foad wrote:
>>>
>>> Thanks. At r1034 I get:
>>>
>>> A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
>>> A∘.|A
>>> DOMAIN ERROR
>>>
>>> And here's one of the cases that fails:
>>>
>>> 1e¯200|1e200
>>> DOMAIN ERROR
>>>
>>> This still seems wrong to me, since the ISO standard for Residue says
>>> "Implementations should avoid signalling limit-error in residue" with
>>> advice on how to avoid it. (OK, it doesn't mention DOMAIN ERROR, but I
>>> think the same principle applies.)
>>>
>>> Jay.
>>>
>>>
>>> On 6 January 2018 at 11:56, Juergen Sauermann <
>>> [email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> thanks, fixed in *SVN 1029*.
>>>>
>>>> /// Jürgen
>>>>
>>>>
>>>> On 01/05/2018 04:37 PM, Jay Foad wrote:
>>>>
>>>> Yes, that expression hangs on my Linux box too. It gets stuck here:
>>>>
>>>> FloatCell::bif_residue (this=0x555555ae13a8, Z=0x555555ae24f8,
>>>> A=0x555555ae11d8) at FloatCell.cc:643
>>>> 643 while (z < 0.0) z = z + a;
>>>> (gdb) p z
>>>> $1 = -inf
>>>> (gdb) p a
>>>> $2 = 9.9999999999999998e-201
>>>>
>>>> Jay.
>>>>
>>>> On 5 January 2018 at 15:24, Xiao-Yong Jin <[email protected]>
>>>> wrote:
>>>>
>>>>> 1e¯200|1e200 hangs on my mac.
>>>>>
>>>>> > On Jan 5, 2018, at 6:57 AM, Juergen Sauermann <
>>>>> [email protected]> wrote:
>>>>> >
>>>>> > Hi Jay,
>>>>> >
>>>>> > hmm, interesting. I am getting this:
>>>>> >
>>>>> > A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
>>>>> > A∘.|A
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > ¯1E200 ¯1E100 ¯1 ¯1E¯100 ¯1E¯200 0 1E¯200 1E¯100 1 1E100 1E200
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> > 0E0 0E0 0 0E0 0E0 0 0E0 0E0 0 0E0 0E0
>>>>> >
>>>>> > I suppose it is one of the A[i] ∣ A[j] which causes the hanging so
>>>>> it would
>>>>> > be interesting to know which one. Probably one with +/- 1E¯200 or
>>>>> 1E¯100.
>>>>> >
>>>>> > Best Regards,
>>>>> > /// Jürgen
>>>>> >
>>>>> >
>>>>> > On 01/05/2018 12:16 PM, Jay Foad wrote:
>>>>> >> At svn r1028 on Linux I get:
>>>>> >>
>>>>> >> A←(-⌽A),0,A←1e¯200 1e¯100 1 1e100 1e200
>>>>> >> A∘.|A
>>>>> >> (hangs)
>>>>> >>
>>>>> >> Jay.
>>>>> >
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>