Even simpler:
)CLEAR
CLEAR WS
d←100 100⊤199
2 ⎕TF 'd'
d←1 99
d←100 100⊤200
2 ⎕TF 'd'
d←2 0J0
d←100 100⊤201
2 ⎕TF 'd'
d←2 1
The 0J0 is the winner!
--blake
On Tue, Jun 10, 2014 at 11:48 PM, Blake McBride <[email protected]> wrote:
> I can now duplicate the problem every time!
>
> Tmfmt 202
> 2:02
> Tmfmt 201
> 2:01
> Tmfmt 159
> 1:59
> Tmfmt 158
> 1:58
> Tmfmt 200
> DOMAIN ERROR
> Tmfmt[1] z←(2 0⍕⍉d[,1;]),':',2 0⍕⍉(d←(2⍴100)⊤,d)[,2;]
> ^ ^
> 2 ⎕TF 'd'
> d←(2 1⍴2 0J0)
>
>
> Only 200 causes the problem! It looks like you were right. Very strange!
>
> Blake
>
>
> On Tue, Jun 10, 2014 at 11:35 PM, Blake McBride <[email protected]>
> wrote:
>
>> I now see that I had a typo in my tests the last time I encountered the
>> problem. Too bad. I have run that function in a loop more than 1000 times
>> and it works every time. I've only had it crash twice. I did'n change any
>> code in Time or Tmfmt, and they take no arguments, so there shouldn't be
>> any situation that causes the problem.
>>
>> When encountered the problems I was debugging a function that now works,
>> so the errors were in the context of another function. (Although, again,
>> that shouldn't have mattered since those functions do not take input or
>> depend on external variables.) Unfortunately, the function I was debugging
>> now works. I can't seem to cause the error anymore, but I am left feeling
>> that something is unreliable.
>>
>> I will try to cause it again. If I do, I will do a lot more testing, and
>> I will try to save the workspace.
>>
>> Thanks.
>>
>> Blake
>>
>>
>>
>> On Tue, Jun 10, 2014 at 5:10 PM, Kacper Gutowski <[email protected]>
>> wrote:
>>
>>> On 2014-06-10 14:08:47, Blake McBride wrote:
>>> > It is funny because I call this function a lot. Sometimes it works,
>>> other
>>> > times it gives me the domain error. Here are some more facts:
>>> >
>>> > DOMAIN ERROR
>>> > Tmfmt[1] z←(2 0⍕⍉d[,1;]),':',2 0⍕⍉(d←(2⍴100)⊤,d)[,2;]
>>> > ^ ^
>>> > d
>>> > 2
>>> > 0
>>>
>>> I think I know what the problem might be.
>>> To confirm, run 2⎕TF'd' which should show you what the values *really*
>>> are. I suspect that d contains a complex zero 0J0.
>>>
>>> When result of encode ⊤ contains zero, sometimes it's returned internally
>>> represented as a complex number instead of real. I discovered this in
>>> January [1], but concluded that this should not be a problem because for
>>> real arguments it will return near-reals anyway (AFAIK the standard
>>> doesn't
>>> say they can not be complex), and near-reals are for all intents and
>>> purposes indistinguishable from reals; therefore I reported it as problem
>>> with functions requiring near-reals rather than with encode. It has been
>>> fixed in SVN 117 and worked for what I tested.
>>>
>>> Now, as for dyadic format A⍕B, ISO 13751 contradicts itself (or maybe
>>> is just underspecified). First, it contains a note saying that “for
>>> complex elements of B, the precision specifier applies to each part of
>>> the representation.” And then it gives an evaluation sequence which
>>> explicitly states that “if any item of the ravel-list of B is not a
>>> real-number, signal domain-error.” Note, that it says “real-number,”
>>> not “near-real number.” It seems that behavior of GNU APL matches the
>>> evaluation sequence as given by the standard.
>>>
>>> I'm not sure, whether it should be resolved by changing ⊤ never to return
>>> complex numbers for real arguments, or by making ⍕ accept it somehow.
>>> Perhaps both.
>>>
>>> -k
>>>
>>> [1] https://lists.gnu.org/archive/html/bug-apl/2014-01/msg00116.html
>>>
>>>
>>
>