Re: -infinity and REPRESENT

[email protected] Tue, 05 May 2020 09:55:45 +0200
Newsgroups gmane.comp.lang.forth.gforth
Message-ID <[email protected]>
On 2020-05-05 08:48, Anton Ertl wrote:
> On Tue, May 05, 2020 at 01:03:31AM +0200, [email protected] wrote:
>> On 2020-05-04 17:24, Anton Ertl wrote:
>> > One issue is how to deal with -infinity (e.g., the result of -1e 0e f/).
>> > Previously Gforth 0.7.2+glibc produced "-inf" and f1=0 (positive),
>> > f2=0 (not valid); other libc implementations might lead to different
>> > results.
>> >
>> > gforth 0.7.9_20200423 uses an ecvt_r supplied by us and produces
>> > "-inf" and f1=-1 (negative), f2=0 (not valid); the new REPRESENT
>> > currently works in the same way (except that it gives you "-infinity",
>> > space permitting).
>> >
>> > In both systems F. and FS. outputs -in.
>> >
>> > iForth behaves like gforth 0.7.2.
>> >
>> > VFX produces "Inf" and f1=-1, f2=0.
>> >
>> > The VFX behaviour looks like the most sensible one to me, but it might
>> > affect code that uses REPRESENT; we can change our own code
>> > accordingly, but what about your code?  Do you have code that uses
>> > REPRESENT and that has been designed for a specific behaviour when
>> > getting -infinity?
>> 
>> ( Bernd clarified f1 and f2. )
>> 
>> > VFX produces "Inf" and f1=-1, f2=0.
>> 
>> I think I will fix iForth (in due time) to give "-INF", f1=-1 f2=-1.
>> It does not make sense to me to claim f2=0 when the item has a sign 
>> and
>> gives valid output for many operations.
> 
> I think that putting the sign in f1, not in the string is most
> appropriate, because that's the same as for finite numbers (-1e
> produces "10..."  and f1=-1).
> 
> As for f2, with IEEE arithmetic there is no number that's strictly
> invalid; IEEE 754 defines a meaning for every bit pattern.  So what
> should we return as f2?
> 
> 1) Always return -1?  That's not useful, and contrary to existing
> practice.
> 
> 2) Return -1 for finite and infinite numbers, and 0 for NaNs.  That's
> arguable, but contrary to existing practice.  Moreover, what would be
> the use of this behaviour?
> 
> 3) Return -1 for finite numbers, and 0 for infinities and NaNs.
> That's existing practice, and is useful for indicating that the that
> the string result consists of digits and that the n (exponent) result
> of REPRESENT is actually meaningful.

Good points. I see now that iForth does not handle +/-0 correctly, and
that the fpout 1.4 discussion is still relevant. When considering to be
non-standard, I'd better take that into account.

-marcel