| NEWS | R Documentation |
New R functions qntR() and qtU(),
Vectorize()d versions of qntR1() and qtU1(),
respectively.
New qtR() <- Vectorize(qntR1, *); pure R
implementation of R's Mathlib C-level qt(), but additionally
allowing tweaks, used for fixing R's bug PR#18630.
Added (optional) log-scale Newton steps via logNewton = log.p,
needing more tests.
New qtNappr() – from the remark in R's ‘nmath/qt.c’
about very large df approximation, now with all 4 large-df terms
from Abramowitz & Stegun's (26.7.5).
New gammaVer() to exemplify R's (partly historical)
versions of gamma() implementations.
New qnormUappr6(),
providing the 6 coefficients-approximation of A. & S. to qnorm().
qnormR() gets new version = "2022-08-04" which
uses MM's newly derived asymptotic approximations to qnorm().
New qnormAsymp() providing new asymptotic approximations
to qnorm().
Added vignette “Asymptotic Tail Formulas for Gaussian Quantiles”.
New chebychevPoly() (and auxiliaries) for evaluation
of Chebyshev polynomials.
qbetaAppr() (and the qbetaAppr.{1,3}()
auxiliaries) now get a log.p argument.
all(?) qbeta.Appr*() functions now accept a
lower.tail argument (with default TRUE).
New R function dpsifn(), as interface to R's C API
dpsifn(), the workhorse of all R's psigamma()
functions.
dpois_raw(x, lambda, *) gets new cutoff small.x__lambda
to not use bd0() or ebd0() when x is much
smaller than lambda.
Simple functions, mostly for didactical and comparison purposes,
dpois_simpl(), dpois_simpl0() and
stirlerr_simpl(), all of which use the “simple” direct
formula which leads to numerical cancellation typically.
New R function bpser() interfacing to the C function of
the same in R's Mathlib pbeta() or bratio() in file
‘nmath/toms708.c’.
Updated URL of Abramowitz & Stegun.
Fixed \ escape in one ‘man/*.Rd’
Our ‘tests/*.R’ no longer rely on the Matrix ‘test-tools.R’ collection but rather use our own.
In ‘tests/chisq-nonc-ex.R’ (and ‘DESCRIPTION’), we've replaced akima by interp as the latter has a FOSS licence.
bd0(x, np, delta, ..) now uses
if (|x-np| <= delta * (x+np)) (less-equal instead of strictly
less), and hence setting delta = 0 is now allowed, using the
series expansion only for x == np, useful e.g., for the case
of highly accurate mpfr-numbers.
Similarly, in log1pmx(x, .., eps2, ..), eps2 = 0 is now allowed.
consistency between ebd0() and ebd0C():
multiplication * e coming last ("bug" did not show ..).
okLongDouble() should no longer fail on M1 mac.
ebd0C() now checking |yl| < 5.5 before returning; was
horrendously wrong on Windows compiled with -mnative as long
as it included (the default) -mfma (FMA:= Fused-Multiply-Add).
fix rchk issue: "need" PROTECT(.) while calling allocating lgamma1p().
new ebd0C() interface to C version; helps to fix
lapsus in pure R version ebd0():
ebd0(x, M) for large M now checks for overflow in
M/x, and notably the case f * 2^-(e+10) =: fg == Inf.
In bd0() work around underflow of (x-np)/(x+np).
new R functions frexp() and ldexp() for getting
and setting base-2 representations of numbers,
and new R function modf() to split number into integer and fractional part,
all interfacing the C99 (math lib) standard functions of the same name.
logcfR.(x) has been “vectorized” in x even
though it's iterative with different number of iterations for each
x[i], and is hence considerably faster when x is an
"mpfr" vector.
TODO: Consider renaming the two logcfR versions; at least neither is deprecated!
fixed embarrassing typo (two i's) bug in logcfR()
stirlerr(n) now also works when is.integer(n) and
n is large enough for n * n to overflow (to NA).
fix typo/thinko in dnbinomR()
ditto in logcfR(*, trace=TRUE) iteration report.
dpois_raw(x, *) now works up to maximal x, now
preventing overflow in previous 2*pi*x computation.
dnbinomR() and dnbinom.mu() fix for x >
size when log=TRUE, notably for x >> size.
new bd0_*() versions of bd0(), based mainly on log1pmx().
To be more modular, our ‘test-tools.R’ no longer
source() those of Matrix.
‘src/bd0.c’ gave warning with some compiler settings with
-Wself-assign.
‘test-tools.R’ readRDS_() thinko fixed.
Provide R functions
log1mexpC(), log1pexpC(), log1pmxC(), and lgamma1pC(),
all interfacing to R's C API (‘Rmath.h’), aka ‘Rmathlib’.
New pnormAsymp() for asymptotic (typically upper tail,
log scale) approximation of pnorm(). With Rmpfr, we
can see how accurate these are in detail.
New dnbinomR() finding better code for R itself,
dnbinom.mu() and dbinom_raw(); also new utility
functions bd0() and stirlerr(), both vectorized,
and also working with "mpfr"-numbers, such that dpois_raw()
now does so, too.
Additionally, an “extended” version of bd0() called
ebd0() in pure R, where a C version was proposed by Morten
Welinder in R's bugzilla, PR#15628.
Experimentally, also provide p1l1() and its Taylor series
approximations p1l1ser() which could be employed for
bd0() / ebd0() instead of the current algorithms.
Several C level utilities to be .Call()ed from R, from R's
mathlib, ldexp() and frexp() even from C math.
Pure R implementations (somewhat experimental) of corresponding
R Mathlib C functions: qbinomR(), qnbinomR(), and qpoisR()
each with several tuning parameters for the underlying algorithm,
notably the root-finding parts.
newly, logcf() now based on C code, perfectly
vectorizes; the pure R version, now called logcfR(x, *)
currently still runs the iterations simultaneously for all 'x[i]' and
hence convergence and rescaling happen by “group decision”,
efficiently but undesirable for strict comparisons.
logcfR(x, *) and log1pmx(x, *) now also work for
"mpfr"-numbers x, and log1pmx() gets optional
eps2 = 1e-2 and minL1 = -0.791 arguments, the defaults
of which may change, as I think at least the latter to not be
perfect.
Now lb_chiAsymp(nu, order) works up to order 8.
Provide the first parts of a new vignette
(‘../vignettes/log1pmx-etc.Rnw’) on log1pmx(),
bd0(), and stirlerr(), which should contain part of
Loader(2000)'s report and new findings of improved bd0() and
stirlerr() computations.
New functions pnormL*() and pnormU*() for
(mathematically proven) lower and upper bound to pnorm(),
notably also for investigation with log.p=TRUE.
qnormR(), implementing current R's qnorm() in
pure R, notably with trace and version options.
Reorganize tests; notably to become less platform dependent.
Many new phyper*() functions and helpers for them, such
as Bernoulli numbers Bern() and asymptotic
lgammaAsymp().
Notably phyperR2() which is a pure R version of R's
own (C code based) phyper().
pnbetaAS310() gained a useAS226 option.
New okLongDouble() function, notably for detecting that
with a valgrinded version of R, long double C
arithmetic seems to silently switch to (simple) double precision.
long double printing from C now should happen correctly on all platforms including 32- and 64-bit Windows.
more efficient (internally vectorized) dntJKBf().
Consequently, dntJKBf1() is deprecated now.
pntR() (and pntR1()) get new option
use.pnorm (the default of which had been hard coded previously).
fix thinko in any_mpfr() and all_mpfr().
pnchisqRC()'s C code gave severe valgrind warnings;
fixed printing of long double etc;
also added special MinGW deal in Windows.
ppoisD() behaves differently in a valgrinded version;
for now, reproducible only when using valgrind on non-valgrinded
installed package.
Renamed (and generalized / merged) many functions to have less "." in names.
New pnbetaAS310() function interfacing to my
corrected C version of 'ASA 310' (2007).
New algdiv() function interfacing to the 'TOMS 708' version of
our logQab().
New pl2curves() which generalizes (somewhat) previous
function p.dnchiB().
Made newton() more flexible with new xMin and
xMax arguments which are notably useful for q*()
(quantile function) computations.
Correspondingly replaced previous qchisq2() and
qchisqA() with new qchisqN() (‘N’ewton).
new pnchisqRC(), a version of R's C level non-central
chi-squared, with additional options.
“new” logspace.add() and logspace.sub().
“new” pnchisqT93() (plus its two auxiliaries),
implementing Temme(1993)'s approximations.
“new” pnchisqBolKuz() and qnchisqBolKuz()
implementing Bol'shev and Kuznetzov (1963)'s approximations.
“new” pnchi1sq() and pnchi2sq() with
“exact” formulas for the special cases df=1 and
df=3.
simplified formula in dtWV().
qnchisqPearson(pp, df=DF, ncp=100) and
qnchisqSankaran_d(*) no longer return NaN for very
large DF = 1e200.
pnchisq() now also has default verbose = 0 as all
other such functions with verbose (or trace[.lev]
optional argument.
Move many of my up to 15 years old DPQ computation utilities into a package, to become public, “bloggable”, etc.