As far as I can tell, the user documentation doesn't provide any guidance on this issue.
I propose to maintain the policy that floats are not integers; and I suggest changing nonintegerp to
(defun nonintegerp (e)
(cond ((and (symbolp e) (or (kindp e '$noninteger) (check-noninteger-facts e) (kindp e '$irrational)))) ;declared noninteger
((mnump e)
(if (integerp e) nil t)) ;all floats are noninteger and integers are not nonintegers
(($ratp e)
(nonintegerp ($ratdisrep e)))
(t (eq t (mgrp e (take '($floor) e))))))
I believe that this is catches all the cases that that the old code found. This will fix the bug http://sourceforge.net/p/maxima/bugs/2501/ .
There are plenty of additional cases that nonintegerp could catch--things like rational x irrational, or nonzero even / nonzero odd, or ...
A minor point, I think it would be OK to declare %pi, %e, and %phi to be irrational. Also, in compar.lisp, I see
; Cutting out inferences for integer, rational, real, complex (DK 10/2009).
; (kind $integer $rational)
; (par ($rational $irrational) $real)
; (par ($real $imaginary) $complex)
It would be helpful if the source code comment explained why these inferences were deleted...
And by the way:
(%i1) integrate(x^-1.0,x);
expt: undefined: 0 to a negative exponent.
--Barton
________________________________