[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