Re: +-Inf and NaN

Richard Fateman <[email protected]> Fri, 1 Mar 2024 10:54:10 -0800
Newsgroups gmane.comp.mathematics.maxima.general,gmane.lisp.gcl.devel
Message-ID <CADB8Zm54XQ1_rJcfJQLmxjq9pHZUZpN4uRTTXVYb-LD_2qkAmQ@mail.gmail.com>
In order to use NaN mantissas as payloads for other data,
I think we need something to break the abstraction. Are these features
available in any lisp?
I would think that given a NaN N,   that we could look at its insides by
(integer-decode-float N)
   but (following (setf sb-int:set-floating-point-modes :traps nil)
SBCL says "Can't decode NaN or infinity")
... normally integer-decode-float  would return 3 values.
mantissa, exponent, sign.

 So fixing it would allow us to "read" the payload.
Actually we may need 2,  to decode a single and a double...
integer-decode-single-float  etc.
Or maybe just (decode-double-nan...) to give just the mantissa.


The reverse of this could look like a functional program...
(construct-double-float-from-integers  mantissa exponent sign)
or destructive one(s)
(insert-single-mantissa target value)
(insert-single-exponent target value)
... etc. double..

or (setf (integer-mantissa N)  value)

These facilities would make it feasible to use NaNs for something..
Thanks.

RJF



.


On Fri, Mar 1, 2024 at 8:52 AM Matt Kaufmann <[email protected]> wrote:

> Hi Camm,
>
> Since this thread has discussed floating-point exceptions, I'll weigh
> in only by requesting that such behavior will continue to be
> configurable.  Specifically, in ACL2 built using GCL 2.6.12
> (Version_2_6_13pre131), where compilation uses safety 0, then
> evaluation of the following form at start-up gives the behavior I want
> -- in particular, an error when there is floating-point overflow or
> division by zero.
>
> (fpe:break-on-floating-point-exceptions
>  :floating-point-overflow t
>  :floating-point-invalid-operation t)
>
> For example, when I evaluate the definitions
>
> (defun f ()
>   (let ((y (* most-positive-double-float most-positive-double-float)))
>     (= (- y y) 0.0d0)))
>
> and
>
> (defun g ()
>   (= (/ 0.0d0 0.0d0) 0.0d0))
>
> and then compile f and g, then the evaluations of (f) and (g) both
> cause errors, which is what I want.  (If f and g are compiled in gcl
> with safety 0 but are called without first calling
> fpe:break-on-floating-point-exceptions, then there is no error.)
>
> By the way, you asked, regarding other Lisps:
>
> > Can one access/manipulate nan at the lisp prompt level?
>
> See attached, which I think answers your question positively for
> LispWorks, Allegro CL, and CCL, but perhaps negatively for SBCL and
> CMUCL.
>
> Thanks,
> Matt
> Camm Maguire <[email protected]> writes:
>
> > Greetings!
> >
> > Richard Fateman <[email protected]> writes:
> >
> >> I think that using exactly the same argument conventions and names as
> the library would be best.
> >> so you overwrite one (or more) of the inputs, for the same reasons as
> mpfr does it,
> >> to save memory allocation when possible.
> >>
> >> Possible glitch:  it assumes you will only pass arguments that are in
> memory, not on a stack.
> >> Thus for actual use you may need to have a functional style program
> interface that puts the
> >> arguments in memory.  I think that mpfr number structures have a size
> [maximum length] and
> >> an actual size in use. So numbers and comparisons of them etc. must be
> >> done by mpfr.
> >
> > Yes this is the rub, and I believe the basic issues are the same with
> > floats as integers.  GCL stores immediate fixnums in one format, other
> > fixnums in another, and bignums in a format directly accessible to gmp.
> > We could expose both the raw gmp interface and the 'functional'
> > interface which would load the first two into the third, but whether
> > done under the hood or by the user directly, there is nothing to
> > overwrite if fixnums are supplied as output arguments.  At the C level
> > we have 5 bignum 'registers' which we do not expose to lisp, as if they
> > contain fixnums the logic pertaining to the same will fail.  I suppose
> > an expert user could make use of the registers and be careful not to
> > refer to them until the gmp calculation is done.
> >
> > Take care,
> >
> >> RJF
> >>
> >> On Wed, Feb 28, 2024 at 12:55 PM Camm Maguire <[email protected]>
> wrote:
> >>
> >>  Greetings!
> >>
> >>  Richard Fateman <[email protected]> writes:
> >>
> >>  > Several of us here have worked on arbitrary-precision floats in Lisp
> >>  > (generally used for longer than double, though I suppose shorter
> could
> >>  > also be specified...), and I think the real win would be to make use
> >>  > of the mpfr library (written in C with various assembly-language
> hacks
> >>  > for different CPUs).
> >>
> >>  mpfr would be a straightforward extension to GCL, as we already use the
> >>  gmp integer library, integrate it with our gbc/memory management, and
> >>  export the functions at the lisp user level:
> >>
> >>  >(gmp:mpz_mul most-positive-fixnum most-positive-fixnum)
> >>
> >>  85070591730234615847396907784232501249
> >>
> >>  The only sensible way to interface to a library like this is to keep
> all
> >>  the function names and calling syntax the same.  GMP is written with
> >>  'side-effects', i.e. destructive modification of the supplied arguments
> >>  one or more of which are considered outputs.  This is so the savvy user
> >>  can avoid unnecessary allocations, which are effectively all that
> matter
> >>  for performance.  Lisp is so functionally oriented, however, that it
> >>  seemed better to me to take only input variables as arguments.  The
> >>  natural alternative to the call above would take three arguments,
> >>  overwrite the first, and return no values.  Your thoughts?
> >>
> >>  Take care,
> >>  --
> >>  Camm Maguire
> [email protected]
> >>
> ==========================================================================
> >>  "The earth is but one country, and mankind its citizens."  --
> Baha'u'llah
> >>
> >
> > --
> > Camm Maguire                                      [email protected]
> >
> ==========================================================================
> > "The earth is but one country, and mankind its citizens."  --
> Baha'u'llah
>

_______________________________________________
Maxima-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/maxima-discuss