Hello,
my previous patch fixed some cases where EQUALP signaled errors, but was not a full solution. In attachment you can find a second patch, to be applied on top of the first one, to fix the remaining EQUALP issues.
It solves the problems shown by the following test:
(loop for x in (list most-positive-single-float most-positive-double-float) do (loop for y in (list (1- (ash #xFFFFFF 104)) (ash #xFFFFFF 104) (1- (ash #xFFFFFFFFFFFFF8 968)) (ash #xFFFFFFFFFFFFF8 968) (ash 1 1024) (/ (ash 1 1026) 3)) do (handler-case (format t "~S ~S ~S ~S~%" (= x y) (= x y) (equalp x y) (equalp y x)) (condition (c) (format t "error: ~A~%" c)))))
On SBCL and CLISP, this test correctly prints (due to 32-bit IEEE single-floats and 64-bit IEEE double-floats) : ---------------------------------------------------------- NIL NIL NIL NIL T T T T NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T T T T NIL NIL NIL NIL NIL NIL NIL NIL ----------------------------------------------------------
After applying my first patch, ABCL 1.3.1 prints: ---------------------------------------------------------- NIL NIL T T ;; note: EQUALP and = disagree T T T T error: The value 1797... is too large to be converted to a single float. error: The value 1797... is too large to be converted to a single float. error: The value 1797... is too large to be converted to a single float. error: The value 7190.../3 is not of type DOUBLE-FLOAT. NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T T ;; note: EQUALP and = disagree again T T T T error: The value 1797... is too large to be converted to a double float. error: The value 7190.../3 is not of type DOUBLE-FLOAT. ----------------------------------------------------------
that is quite clearly bugged, since CLHS states: 1) for numbers, EQUALP is the same as = 2) EQUALP must never signal errors
(without my first patch, the outcome is worse).
With the second patch in attachment, this test succeeds on ABCL too.
I hope you will appreciate the irony that I *removed* code instead of adding it...
Regards,
Massimiliano Ghilardi
_______________________________________________ Armedbear-devel mailing list Armedbear-devel@common-lisp.net https://mailman.common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel