Re: [Rd] qcauchy accuracy (PR#7902)

2005-06-01 Thread maechler
 Morten == Morten Welinder [EMAIL PROTECTED]
 on Fri, 27 May 2005 20:24:36 +0200 (CEST) writes:

Morten Full_Name: Morten Welinder Version: 2.1.0 OS: src
Morten only Submission from: (NULL) (216.223.241.212)


Morten Now that pcauchy has been fixed, it is becoming
Morten clear that qcauchy suffers from the same problems.

Morten
Morten qcauchy(pcauchy(1e100,0,1,FALSE,TRUE),0,1,FALSE,TRUE)

Morten should yield 1e100 back, but I get 1.633178e+16.
Morten The code below does much better.  Notes:

Morten 1. p need not be finite.  -Inf is ok in the log_p
Morten case and R_Q_P01_check already checks things.

yes

Morten 2. No need to disallow scale=0 and infinite
Morten location.

yes

Morten 3. The code below uses isnan and finite directly.
Morten It needs to be adapted to the R way of doing that.

I've done this, and started testing the new code; a version will
be put into the next version of R.

Thank you for the suggestions.

double
qcauchy (double p, double location, double scale, int lower_tail, int 
log_p)
{
  if (isnan(p) || isnan(location) || isnan(scale))
return p + location + scale;

  R_Q_P01_check(p);
  if (scale  0 || !finite(scale)) ML_ERR_return_NAN;

  if (log_p) {
if (p  -1)
   lower_tail = !lower_tail, p = -expm1 (p);
else
   p = exp (p);
  }
  if (lower_tail) scale = -scale;
  return location + scale / tan(M_PI * p);
}

__
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] qcauchy accuracy (PR#7902)

2005-05-27 Thread mwelinder
Full_Name: Morten Welinder
Version: 2.1.0
OS: src only
Submission from: (NULL) (216.223.241.212)


Now that pcauchy has been fixed, it is becoming clear that qcauchy suffers from
the same problems.

qcauchy(pcauchy(1e100,0,1,FALSE,TRUE),0,1,FALSE,TRUE)

should yield 1e100 back, but I get 1.633178e+16.  The code below does much
better.  Notes:

1. p need not be finite.  -Inf is ok in the log_p case and R_Q_P01_check
   already checks things.

2. No need to disallow scale=0 and infinite location.

3. The code below uses isnan and finite directly.  It needs to be adapted to
the
   R way of doing that.


double
qcauchy (double p, double location, double scale, int lower_tail, int log_p)
{
if (isnan(p) || isnan(location) || isnan(scale))
return p + location + scale;

R_Q_P01_check(p);
if (scale  0 || !finite(scale)) ML_ERR_return_NAN;

if (log_p) {
if (p  -1)
lower_tail = !lower_tail, p = -expm1 (p);
else
p = exp (p);
}
if (lower_tail) scale = -scale;
return location + scale / tan(M_PI * p);
}

__
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel