Still following up on my own post: (condition-case nil (setq foo (/ 0.0 0.0)) (arith-error nil)) In older versions of Emacs (at least prior to April 2005 CVS), this would evaluate to nil. Now, it evaluates to -0.0NaN. I can modify the code like so: (and (condition-case nil (setq foo (/ 0.0 0.0)) (arith-error nil)) (bar foo)) ; foo must be a number, not a NaN What function do I use for bar? `numberp' doesn't work, since (numberp -0.0NaN) is non-nil.
To make the point simpler: (numberp (/0.0 0.0)) returns t. That seems like a bug to me. If this is not considered a bug, and `numberp' should return non-nil for NaN, as it currently does, then what are all the possible NaN values to test? The Elisp manual mentions that the read syntax for (/ 0.0 0.0) is 0.0e+NaN. On my system it is in fact -0.0e+NaN. Are there additional NaN values, or would this be a sufficient test for NaN-ness, to replace `numberp': (let ((foo (/0.0 0.0))) (and (not (equal -0.0e+NaN foo)) (not (equal 0.0e+NaN foo)))) (Note that (= -0.0e+NaN foo) returns nil, while (equal -0.0e+NaN foo) returns `t'.) _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel