That's a good point.

Thinking about that side of things: something else must be dealing with that.

I suppose I should trace things out to see where that is happening.

(I am not sure if Marshall Lochbaum's comment "I fixed it in unbox a
while ago" is a parallel fix or is a reference to the actual code
which is responsible for the correct behavior of jtfmt1() for NaN
despite this if statement not doing anything in its current form.
Probably just a parallel fix...)

Thanks,

-- 
Raul


On Sun, Jun 12, 2016 at 8:43 AM, bill lam <bbill....@gmail.com> wrote:
> I am quite puzzled why the original code still works without any patch. eg,
>
>    8!:0] 3.4 1 _.
> +---+-+--+
> |3.4|1|_.|
> +---+-+--+
> On Jun 12, 2016 8:06 PM, "Raul Miller" <rauldmil...@gmail.com> wrote:
>
>> I agree with bill lam.
>>
>> And why this is might be worth going over for people not comfortable
>> reading J's source code.
>>
>> Here's the code being modified:
>>
>> static void jtfmt1(J jt,B e,I m,I d,C*s,I t,C*wv){D y;
>>  switch(t){
>>   case B01:  sprintf(jt->th2buf,s,(D)*wv);     break;
>>   case INT:  sprintf(jt->th2buf,s,(D)*(I*)wv); break;
>>   case XNUM: fmtx(e,m,d,s,t,(X*)wv);          break;
>>   case RAT:  fmtq(e,m,d,s,t,(Q*)wv);          break;
>>   default:
>>    y=*(D*)wv; y=y?y:0.0;  /* -0 to 0 */
>>    if     (!memcmp(wv,&inf, SZD))strcpy(jt->th2buf,e?"  _" :' '==*s?" _"
>> :"_" );
>>    else if(!memcmp(wv,&infm,SZD))strcpy(jt->th2buf,e?" __" :' '==*s?"
>> __":"__");
>>    else if(_isnan((float) *wv)  )strcpy(jt->th2buf,e?"  _.":' '==*s?"
>> _.":"_.");
>>    else sprintf(jt->th2buf,s,y);
>> }}   /* format one number */
>>
>> And the change changes:
>>    else if(_isnan(*wv)  )strcpy(jt->th2buf,e?"  _.":' '==*s?" _.":"_.");
>>
>> to
>>    else if(_isnan((float) *wv)  )strcpy(jt->th2buf,e?"  _.":' '==*s?"
>> _.":"_.");
>>
>>
>>
>> But
>> (1) J uses the (double) data type rather than the (float) data type.
>> https://github.com/jsoftware/jsource/blob/master/jsrc/jtype.h#L37
>>
>> (2) the (wv) variable type is a pointer to character (because the code
>> was written based on documentation which was written before pointer to
>> void became popular for handling this kind of issue).
>>
>> https://github.com/paspanag/jsource/blob/b4c69a3887a7586a3282cdbdbad34f0fa84aef68/jsrc/f2.c#L132
>>
>> And, in fact, if you look at line 139, you see the *(D*)wv pattern
>> being used to first transform the wv pointer into a pointer to a
>> double and then to find the value being pointed at.
>>
>> That said, line 139 looks like this:
>>    y=*(D*)wv; y=y?y:0.0;  /* -0 to 0 */
>>
>> and so it's tempting to think that maybe we should just use (y)
>> instead of spelling out (*(D*)wv) again.
>>
>> But there's also the worry about y having been reassigned.
>> Conceptually speaking, a NaN value is not a negative zero value or any
>> kind of zero value. But people like to argue all the time, and NaN
>> values are mathematical nonsense so you never know what is valid about
>> them. See, for example:
>>
>> http://stackoverflow.com/questions/9158567/nan-to-bool-conversion-true-or-false
>>
>> There, some people reason that NaN values are true values while others
>> quite rightly retort that NaN values are not true values.
>>
>> Anyways, you never know what changes people will be trying to make and
>> for something nonsensical like NaN it pays to be a little cautious.
>>
>> So, anyways, the patch here would get a character value from the
>> "first" byte of the number being tested and then transform that to a
>> float value before testing whether the value was an IEEE 754 floating
>> point representation of a "Not a Number" value. And since characters
>> are never NaN values (they are instead values in the range -128 ..
>> 127) I think this change would have made it so that we would not see
>> _. when formatting numbers.
>>
>> (But I have not actually tested code with that change, to know exactly
>> what would have happened when trying to format a NaN value. J mostly
>> prevents those values from existing in the first place, because they
>> are nonsense, but there are a few ways to get them to exist.)
>>
>> Anyways, I saw this and I thought that maybe I should go through the
>> kind of thinking you might infer from what bill was suggesting.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>>
>> On Sun, Jun 12, 2016 at 6:46 AM, bill lam <bbill....@gmail.com> wrote:
>> > I think the proper fix should be
>> > *(D*)wv
>> > ---------- Forwarded message ----------
>> > From: "Peter Panaguiton" <notificati...@github.com>
>> > Date: Jun 10, 2016 4:38 AM
>> > Subject: [jsoftware/jsource] gcc complaining about type for _isnan. (#1)
>> > To: "jsoftware/jsource" <jsou...@noreply.github.com>
>> > Cc:
>> >
>> > Trying to packge the j git version as the current version in the Nixos
>> >> packages is broken. Built it with this as the only error stopping it
>> from
>> >> being built with Nixos's current gcc (gcc 5.3 and glibc 2.23).
>> >> ------------------------------
>> >> You can view, comment on, or merge this pull request online at:
>> >>
>> >>   https://github.com/jsoftware/jsource/pull/1
>> >> Commit Summary
>> >>
>> >>    - gcc complaining about type for _isnan.
>> >>
>> >> File Changes
>> >>
>> >>    - *M* jsrc/f2.c
>> >>    <https://github.com/jsoftware/jsource/pull/1/files#diff-0> (2)
>> >>
>> >> Patch Links:
>> >>
>> >>    - https://github.com/jsoftware/jsource/pull/1.patch
>> >>    - https://github.com/jsoftware/jsource/pull/1.diff
>> >>
>> >> —
>> >> You are receiving this because you are subscribed to this thread.
>> >> Reply to this email directly, view it on GitHub
>> >> <https://github.com/jsoftware/jsource/pull/1>, or mute the thread
>> >> <
>> https://github.com/notifications/unsubscribe/ABg1YZJ46q9zqI5yvmNYjfcv-3n59I36ks5qKHmtgaJpZM4IyYR7
>> >
>> >> .
>> >>
>> > ----------------------------------------------------------------------
>> > 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

Reply via email to