rectform strange question



On Nov. 1, 2011, I wrote:
--------------------------
>debug printouts now show this question
>comes from rectform:
>
>(%i2) rectform(%i*bessel_i(0,%i*inf));
>Is  1  zero or nonzero?
>
>nonzero;
>(%o2) %i*bessel_i(0,%i*inf)
-------------------------------------
This doesn't happen if I use limit inside the
code, which replaces %i*inf by infinity.
-------------------------------------
(%i7) load(temp);
(%o7) "c:/work2/temp.mac"
(%i8) nint_integrate(bessel_i(1,%i*x),x,1,inf);
vx = %i*bessel_i(0,%i*x)

vxop = "*"

vxa = %i*bessel_i(0,%i)

vxa = 0.76519768655797*%i

vxb = %i*bessel_i(0,infinity)

vxb = %i*'realpart(bessel_i(0.0,infinity))
    -1.0*'imagpart(bessel_i(0.0,infinity))

 use defint instead
defint: integral is divergent.
#0: nint_integrate(ue=bessel_i(1,%i*x),uvar=x,ua=1,ub=inf)
 -- an error. To debug this try: debugmode(true);

(%i9) ax : %i*bessel_i(0,%i*x)$

(%i10) axb : limit(ax,x,inf,minus);
(%o10) %i*bessel_i(0,infinity)

(%i11) float(axb);
(%o11) %i*bessel_i(0.0,infinity)

(%i12) rectform(%);
(%o12) 
%i*'realpart(bessel_i(0.0,infinity))-'imagpart(bessel_i(0.0,infinity))
------------------------------------
using the limit form of the code, with debug printouts present:
----------------------------------------------------------------
 nint_integrate (ue,uvar,ua, ub) :=
   block ([vx,vxa,vxb,vxop ],

      /* try to get indefinite integral first */

      vx : apply ('integrate,[ue,uvar]),
      display (vx),
      vxop : op(vx),
      display (vxop),
      if vxop # integrate then (
         if ua = minf then
           vxa : limit (vx,uvar,minf,plus)
         else vxa : subst(ua,uvar,vx),
         display(vxa),

         vxa : expand(float(rectform(vxa))),
         display (vxa),

         if complex_number_p (vxa) then (
            if ub = inf then
               vxb : limit (vx,uvar,inf,minus)
            else
               vxb : subst(ub,uvar,vx),
            display (vxb),
            vxb : expand(float(rectform(vxb))),
            display (vxb),
            if complex_number_p (vxb) then return (vxb - vxa))),

      /* otherwise use defint */
       print(" use defint instead "),
      apply ('integrate,[ue,uvar,ua,ub]),
      expand(float(rectform(%%))))$
---------------------------------------------
So problem solved.
Sorry for the noise.

Ted Woollett