[cmucl-imp] [cmucl-help] NaN

Marco Antoniotti marcoxa at cs.nyu.edu
Thu Jan 12 22:08:56 UTC 2017


> On Jan 12, 2017, at 16:47 , Raymond Toy <toy.raymond at gmail.com> wrote:
> 
>>>>>> "Marco" == Marco Antoniotti <marcoxa at cs.nyu.edu> writes:
> 
>>> On Jan 11, 2017, at 17:14 , Raymond Toy <toy.raymond at gmail.com> wrote:
>>> 
>>>>>>>> "james" == james anderson <james.anderson at setf.de> writes:
>>> 
>    james> good morning;
>>>>> On 2017-01-11, at 09:48, Marco Antoniotti <marcoxa at cs.nyu.edu> wrote:
>>>>> 
>>>>> Thank you James, thank you Stelian.
>>>>> 
>>>>> The CFFI solution seems very interesting and the codec James pointed me to are also useful.
>>> 
>    james> i sent marco an off-line note, in which i had pointed out some code which figures (among other things) in an amqp implementation, where it is figures in buffer codecs.
>    james> for the curious, it is to be found here:
>>> 
>    james> https://github.com/lisp/de.setf.utility/tree/master/codecs/float-codecs.lisp
>>> 
>>> This is also pretty nice and mostly portable.  I think with a bit of
>>> work it can be made (almost) completely portable using just CL
>>> functions.  I guess the main problem is constructing infinities.
>>> Testing for NaN is pretty easy:  (= x x) is always false if x is NaN.
> 
>    Marco> Do you have an idea about how to go ahead and construct infinities?
> 
> In pure CL?  No, I don't know of any way to do that.  Besides, support
> for infinities isn't required. I don't think clisp can handle
> infinities (or NaNs?).
> 
> At best, the CL implementation has a way to do it, or you can use
> cffi.

Yes.  I understand.

However, as usual, the situation is messier that one knew.

Consider this.

CMUCL (and SBCL)

CL-USER> (/ 0.0 0.0)
; Evaluation aborted on #<FLOATING-POINT-INVALID-OPERATION {48A20E2D}>.


LW

CL-USER 17 > (/ 0.0 0.0)
Error: Division-by-zero caused by / of (0.0 0.0).


Allegro

CG-USER(1): (/ 0.0 0.0)
Error: Division-by-zero


CCL

? (/ 0.0 0.0)
> Error: FLOATING-POINT-INVALID-OPERATION detected
>        performing / on (0.0 0.0)


ABCL

CL-USER(1): (/ 0.0 0.0)
#<SINGLE-FLOAT NaN>


So.  According to my understanding, the behavior of CMUCL/SBCL and CCL is “correct”.  The same could be said for ABCL.  LW and Allegro instead signal the wrong exception.

What do you think?

MA


--
Marco Antoniotti




More information about the cmucl-imp mailing list