[Gcl-devel] Re: [Maxima] float to bfloat



Greetings, and thanks for your feedback!

"Stavros Macrakis" <stavros.macrakis@verizon.net> writes:

> > My understanding is that the Common Lisp spec is silent on an 
> > implementation's treatment of Nan and Inf.  If so, and we are 
> > implicitly free to implement them in a useful way, I'd be 
> > happy to do so for maxima's benefit.  Paul, can we define 
> > NaN, and Inf as symbols with floating point constant values, 
> > and 1/0, -1/0, and 0/0 as analogous rationals?  What would be 
> > useful rules regarding expressions involving these symbols, 
> > beyond NaN - NaN = NaN et. al. mentioned above? 
> 
> Existing Lisp code may expect 1/0 and 1/0.0 to give errors, not to
> silently return values.  It may explicitly catch those errors to do the
> right thing, or it may allow them to be propagated, signalling that its
> result is not valid.  Current code also silently returns float-infinity
> for (expt 9.9 9999), though 9.9e9999 gives a floating overflow error.
> 
> I don't think it's necessary to have constants NaN, Inf, etc.  User code
> can easily enough define such constants, e.g.
> 
>   (defconstant double-floating-infinity (expt 9.9d0 9999))
>   (defconstant double-floating-nan (sin double-floating-infinity))
> 
> After all, Common Lisp doesn't have standard constants for pi, sqrt(2),
> etc., does it?  I am not sure what you mean by 'rules regarding
> expressions' -- the machine's IEEE float implementation takes care of
> all that.  With the above definitions, you have:
> 
>   (= DFnan DFnan) => nil
>   (> Dfinf 0) => t
>   (/ 1 inf) => 0.0
> 
> though you also have
> 
>   (/ 1.0 0.0) => Zero divisor error
> 
> which I don't think you can turn off in GCL 2.5.0.
> 
> To fully integrate NaN/Inf/... into GCL, it would be nice to have
> standard input/output formats and make sure that all floating primitives
> do something useful with them.  I believe that integer-encode-float
> works with NaN/Inf, giving an unambiguous return value.  Constructing a
> NaN cannot of course be done in the usual way of constructing a float,
> namely (* sign mantissa (expt 2.0 exponent)).
> 

OK, so maybe the only useful change might be allowing such items to
print from this perspective.  BTW, are the following what you would
expect?

(integer-decode-float (expt 9.9d0 9999))

4503599627370496
972
1

>(integer-decode-float (sin (expt 9.9d0 9999)))

6755399441055744
972
-1

>

Take care,


> _______________________________________________
> Maxima mailing list
> Maxima@www.math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
> 
> 
> 

-- 
Camm Maguire			     			camm@enhanced.com
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah