On Jan 12, 2017, at 16:47 , Raymond Toy <toy.raymond@gmail.com> wrote:
"Marco" == Marco Antoniotti <marcoxa@cs.nyu.edu> writes:
On Jan 11, 2017, at 17:14 , Raymond Toy <toy.raymond@gmail.com> wrote:
>> "james" == james anderson <james.anderson@setf.de> writes:
james> good morning;
On 2017-01-11, at 09:48, Marco Antoniotti <marcoxa@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