Hi Ray maybe we can just have this discussion here. I am not a person who knows all that much about the IEEE fine details, but I would like to have a “higher level” portable API to access IEEE NaNs, infinities, and rounding modes. I am kind of familiar with the C99 API. Would you like to have an API consisting of something like (given a package “M”, not its real name) the following? Assuming all “quiet” NaNs. Parameter NaN Constant <float-length>-float-positive-infinity Constant <float-length>-float-negative-infinity Type rounding-mode (member :positive :negative :toward-zero :to-nearest) Struct floating-point-configuration Function current-floating-point-configuration Function (setf current-floating-point-configuration) Macro with-floating-point-configuration Function current-rounding-mode Function (setf current-rounding-mode) Macro with-rounding-mode Details to be filled… This covers CMUCL and SBCL and (mostly) LW. CCL could be bent to comply. For ECL and ABCL pressures can be made; ACL is another story. What do you think? MA
On Jan 8, 2017, at 23:58 , Raymond Toy <toy.raymond@gmail.com> wrote:
Oops. Meant to reply to all.
---------- Forwarded message ---------- From: Raymond Toy <toy.raymond@gmail.com> Date: Sun, Jan 8, 2017 at 10:00 AM Subject: Re: [cmucl-help] NaN To: Marco Antoniotti <marcoxa@cs.nyu.edu>
On Sat, Jan 7, 2017 at 3:44 PM, Marco Antoniotti <marcoxa@cs.nyu.edu> wrote:
Hi
I am fiddling around with some IEEE floating points.
I see that the following code produces a (almost nice) “quiet” NaN.
CL-USER> (ext:with-float-traps-masked (:invalid) (* 0.0 ext:double-float-positive-infinity)) #<DOUBLE-FLOAT Quiet NaN>
Alas, there seem to be no way to tell the compiler that we are actually executing the multiplication within the ext:with-float-traps-masked. This prevents us, for example to do things like
(defparameter NAN (ext:with-float-traps-masked (:invalid) (* 0.0 ext:double-float-positive-infinity))
in a file and having it compiled “nicely”. The compiler complains (warns) about a FLOATING-POINT-INVALID-OPERATION
; In: DEFPARAMETER NAN
; (* 0.0 EXTENSIONS:DOUBLE-FLOAT-POSITIVE-INFINITY) ; Warning: Lisp error during constant folding: ; Arithmetic error FLOATING-POINT-INVALID-OPERATION signalled. ; Operation was *, operands (0.0d0 #.EXT:DOUBLE-FLOAT-POSITIVE-INFINITY).
What version? I don't get any warnings from snapshot-2017-01.
Note that the value is then assigned correctly, but it seems very hard (at least I did not figure out how to do it) to get to the constant folding time to catch and muffle the warning.
Any ideas?
Since you're using cmucl-specific functions, you could always just construct the NaN directly using kernel:make-double-float. Something like (kernel:make-double-float -524288 0)
-- Ray
-- Ray _______________________________________________ cmucl-imp mailing list cmucl-imp@lists.zs64.net https://lists.zs64.net/mailman/listinfo/cmucl-imp
-- Marco Antoniotti