The Clozure CL developers would like to fix any compiler bugs that prevent
Maxima from
running under Clozure CL. We'll need to provide test cases (in lisp) that
demonstrate those bugs.
The bessel code causes many of the rtest14 and rtest15 bugs; for example
(%i1) bessel_j(3,2.0);
(%o1) 0.0
I've tried to track done the source of this bug, but I'm stuck. In
bessel.lisp, I see
(defun bessel-j (order arg)
<cut>
;; We have a real arg and order > 0 and order not 0 or 1
;; for this case we can call the function dbesj
(multiple-value-bind (n alpha)
(floor (float order))
(let ((jvals (make-array (1+ n) :element-type 'double-float)))
(slatec:dbesj (abs (float arg)) alpha (1+ n) jvals 0)
(cond ((>= arg 0)
(aref jvals n))
After the call to slatec:dbesj, each member of the array jvals is 0.0. And
that
seems correct to me, but it's not. I don't understand how calling
slatec:dbesj
modifies jvals. How is this a Clozure CL bug? The complex case works:
(%i2) bessel_j(3, 2.0 + 0.0001 * %i);
(%o2) 1.5941915455754587E-5 %i + 0.128943249067055
I don't see all that many differences between the real and complex cases in
bessel-j.
So I'm really stuck. Advice?
Barton