underflow handling in besselK (PR#2179)

bolker@zoo.ufl.edu bolker@zoo.ufl.edu
Thu, 17 Oct 2002 19:58:33 +0200 (MET DST)


  The besselK() function knows about overflows/underflows internally;
there is a constant xmax_BESS_K in src/nmath/bessel.h (and referred to
only in bessel_k.c), equal to 705.342, which is checked if expon.scaled is
FALSE.  (The equivalent number for bessel_i.c is 709, defined as
exparg_BESS in bessel.h.) However, besselK(x) silently returns +Inf if
x>705.342.  This behavior is reasonable for besselI (where the problem is
an overflow), but seems wrong for besselK (since the problem here is an
*underflow*).  The answer may be as simple as returning 0 rather than +Inf
in this case.
 
  If this is appropriate, the following patch should do the job:

*** bessel_k.c	Thu Oct 17 13:55:55 2002
--- bessel_k.c.dist	Thu Oct 17 13:48:53 2002
***************
*** 216,224 ****
  	    ML_ERROR(ME_RANGE);
  	    *ncalc = *nb;
  	    for(i=0; i < *nb; i++)
! 		if (ex<=0)
! 	   	   bk[i] = ML_POSINF;
! 	        else bk[i]=0.0;
  	    return;
  	}
  	k = 0;
--- 216,222 ----
  	    ML_ERROR(ME_RANGE);
  	    *ncalc = *nb;
  	    for(i=0; i < *nb; i++)
! 		bk[i] = ML_POSINF;
  	    return;
  	}
  	k = 0;

  (By the way, the test for x<=0 seems inappropriate; it looks like x<0 is 
caught elsewhere and that this is really a test for x==0.)

  [Apologies if this is not considered a bug, but my judgment is that it
is -- couldn't be bothered with a round of sending it to r-devel first.]

  Ben Bolker

--please do not edit the information below--

Version:
 platform = i686-pc-linux-gnu
 arch = i686
 os = linux-gnu
 system = i686, linux-gnu
 status = 
 major = 1
 minor = 6.0
 year = 2002
 month = 10
 day = 01
 language = R

Search Path:
 .GlobalEnv, package:ctest, Autoloads, package:base

-- 
318 Carr Hall                                bolker@zoo.ufl.edu
Zoology Department, University of Florida    http://www.zoo.ufl.edu/bolker
Box 118525                                   (ph)  352-392-5697
Gainesville, FL 32611-8525                   (fax) 352-392-3704


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._