should all floats be nonintegers?



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
________________________________