Hi,
¯4○ is supposed to be equal to 5○¯6○. While trying to check this on GNU
APL, I noticed your ARCCOSH gives a domain error on my vector.
⎕IO←0
X←1D45*⍳8
8 1⍴¯6○X
DOMAIN ERROR
8 1⍴¯6○X
^ ^
APL2 returns the answer. If I write my own ARCCOSH...
∇
[0] Z←ARCCOSH X
[1] Z←(X+1)⋆0.5
[2] Z←Z×(X-1)⋆0.5
[3] Z←X+Z
[4] Z←⍟Z
∇
8 1⍴ARCCOSH X
0
7.642854597E¯1J9.989374566E¯1
8.81373587E¯1J1.570796327E0
7.642854597E¯1J2.142655197E0
3.814090015E¯8J3.141592615E0
7.642854597E¯1J¯2.142655197E0
8.81373587E¯1J¯1.570796327E0
7.642854597E¯1J¯9.989374566E¯1
Then I get a result, which agrees with APL2 to a few decimal places in most
places.
On Sun, Aug 30, 2015 at 11:24 PM, Mike Duvos <[email protected]> wrote:
> Hi,
>
> I looked into the ¯4○ thing a bit more and have identified the discrepancy
> between APL2 and GNU APL, which may or not be a bug depending on whether
> the ISO spec agrees with APL2 on this function.
>
> According to the APL2 language reference, if the real part is greater than
> or equal to zero, or the real part is between -1 and zero with the
> imaginary part zero, you return (¯1+X×X)*0.5. Otherwise you flip the sign
> and return -(¯1+X×X)*0.5.
>
> So in APL2....
>
> 8 1⍴¯4○1D45*-⎕IO-⍳8
> 0.000000000E0
> 4.550898606E¯1J 1.098684113E0
> 7.146297292E¯16J 1.414213562E0
> ¯4.550898606E¯1J 1.098684113E0
> ¯3.814090016E¯8J 3.814090016E¯8
> ¯4.550898606E¯1J¯1.098684113E0
> ¯1.342666713E¯15J¯1.414213562E0
> 4.550898606E¯1J¯1.098684113E0
>
> and in GNU APL
>
> 8 1⍴¯4○1D45*-⎕IO-⍳8
> 0
> 4.550898606E¯1J1.098684113E0
> 0J1.414213562E0
> 4.550898606E¯1J¯1.098684113E0
> 1.10663761E¯8J¯1.10663761E¯8
> 4.550898606E¯1J1.098684113E0
> 0J1.414213562E0
> 4.550898606E¯1J¯1.098684113E0
>
> As you can see, APL2 flips the signs on half the values, and GNU APL does
> not.
>
> So APL2 cancels, and GNU APL adds up to a big value when you sum them.
>
> So that's why they are different.
>
> Whether this is "wrong" remains to be seen, but it's a case where APL2 and
> GNU APL do things differently.
>
>
> On Sun, Aug 30, 2015 at 9:37 PM, Mike Duvos <[email protected]> wrote:
>
>> Dropped an iota in the prior post.
>>
>> X←1D1*⍳360
>> +/¯4○X
>> ¯3.814090113E¯8J3.814086508E¯8
>>
>> That changes the IBM result slightly, but the GNU APL one is still off by
>> a large amount.
>>
>>
>>
>> On Sun, Aug 30, 2015 at 9:13 PM, Mike Duvos <[email protected]> wrote:
>>
>>> )CLEAR
>>> CLEAR WS
>>> ⎕IO←0
>>> X←1D1*360
>>> +/(¯1+X×X)*0.5
>>> 5.393937829E¯8J¯5.393937829E¯8
>>>
>>> [IBM APL2]
>>>
>>> +/¯4○X
>>> 5.393937829E¯8J¯5.393937829E¯8
>>>
>>> [GNU APL]
>>>
>>> +/¯4○X
>>> 122.0040743J2.828427087
>>>
>>> I think this is wrong.
>>>
>>>
>>>
>>
>