How about:
(defun meqp-by-csign (z a b)
(let ((sgn) ($niceindicespref `((mlist) ,(gensym) ,(gensym) ,(gensym))))
(cond ((and (mexptp z) (eq t (mnqp (third z) '$minf)) (eq t (mnqp
(second z) 0))) nil)
(t
(setq z ($niceindices z))
(setq sgn (csign (sratsimp z)))
(cond ((eq '$zero sgn) t)
((and (eq sgn t) (islinear z '$%i))
(let ((r (meqp ($realpart z) 0))
(i (meqp ($imagpart z) 0)))
(cond ((or (eq r nil) (eq i nil)) nil)
((and (eq r t) (eq i t)) t)
(t `(($equal) ,a ,b)))))
((member sgn '($pos $neg $pn)) nil)
(t `(($equal) ,a ,b)))))))
(1) The test suite is OK with this change. (The extra code gets called 3
times.)
(2) We have :(
(%i3) is(equal(minf, -inf));
(%o3) false
(%i4) is(equal(minf, minf));
(%o4) true
(3) The gamma failures have been fixed:
No unexpected errors found.
Evaluation took:
129.031 seconds of real time
129.031250 seconds of total run time (121.109375 user, 7.921875 system)
[ Run times consist of 4.662 seconds GC time, and 124.370 seconds non-GC
time. ]
100.00% CPU
6,045 forms interpreted
4,738 lambdas converted
411,870,521,592 processor cycles
7,214,885,896 bytes consed
Barton