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
[email protected]
http://lists.gnu.org/mailman/listinfo/emacs-devel