                 Changes in version 0.1.5 (2026-10-10)                  

    o   0.1.4 was tagged but never sent to CRAN. Its changes, listed
	below, reach CRAN with this release.

    o   The check that 0.1.4 put in front of the functions that work a
	value at a time missed some arguments: p in Qf, Tol in VMmin,
	Plot in mlr, add in ellipse, GradTol, StepTol, FnTol and
	ItnLimit in Optim0, and n in Rnorm, and so in Rmvn, which hands
	it to Rnorm. Given a vector, each still stopped with one of R's
	own errors. Every argument that drives an if or a while is now
	checked, and n in Rmvn besides: 142 argument positions across
	70 functions, among them n in trapez1 and N in romb, which
	gained an if with the fixes below. The help pages of the nine
	functions name the arguments added. Since Plot, add, Double in
	Dec2Bin and DecFlag in LOG are TRUE or FALSE, the error, and
	their help pages, now ask for "a single value" rather than "a
	single number".

    o   At a size of one, several functions failed. runifLC() at its
	default n = 1, SymInv, LDLT and evJacobi on a 1 x 1 matrix, and
	romb with N = 1 stopped with an error; trapez0 on a single
	point returned NA; trapez1 with n = 1 returned three times the
	trapezoidal value, and NashSVD on a one-column matrix returned
	0 as its singular value. In most, a 2:n or 1:(n-1) that should
	be empty at n = 1 counted down instead (in trapez1 it added
	both end points a second time); NashSVD has no pair of columns
	to rotate then, and so never set the singular value. Each now
	handles the case, as Grad and Deriv2 already did, and the romb
	page no longer asks for N above 2.

    o   At n = 0, Rnorm returned FALSE, and Rgamma, Rgamma0 and Rbeta
	returned one deviate for most shapes, where rnorm(0) gives
	numeric(0). They all give numeric(0) now.

    o   SQRT(Inf) never returned: it handed Inf to NORM, whose halving
	loop cannot end on Inf, and NORM looped forever on a negative x
	as well. SQRT(Inf) is now Inf, with the warning EXP and LOG
	give; NORM stops with a message on a non-finite x and gives a
	negative fraction for a negative x.

    o   evJacobi stopped with "object 's' not found" on some symmetric
	matrices, diag(c(2, 1)) among them: a test on the rotation sine
	ran on a pair that needed no rotation, before any sine had been
	set. The test now runs only when a rotation is made.

    o   VMmin never returned when its search direction right after
	resetting the Hessian estimate was not downhill, as at a
	starting point where the gradient is zero: a misspelt
	SmallXCount kept its loop alive. Optim0 stopped with "object
	'RelStep' not found" whenever it ended on its first iteration;
	RelStep and DelF are NA then.

    o   MachEps3 and MachEps4 with MaxIter = 0 stopped with "object
	'CurEps' not found"; they return their first trial value, 0.5
	and -0.5, with iteration 0.  Dec2Bin(0) took the logarithm of 0
	and returned NaN bits; it returns all zeros, the pattern of +0,
	and for -0 the same with the sign bit set. Run.test returned a
	p-value of 2 when no nonzero value was left; it returns NA.

    o   Given NA, EXP, LOG and SQRT stopped with R's "missing value
	where TRUE/FALSE needed", and SQRT did the same for NaN. They
	now return NA for NA, as exp, log and sqrt do, and SQRT returns
	NaN for NaN with the warning EXP and LOG already give.

    o   mlr no longer calls anyNA, which first appeared in R 3.1.0,
	above the R (>= 3.0.0) that DESCRIPTION declares.

    o   Source comments that described methods the code does not use
	are corrected. erfccheb, betaiapprox and gammpapprox forward to
	erfc, betai and gammp or gammq; erfc goes through gammq, not a
	Cephes rational approximation; and what the EXP guards keep
	from overflowing is g*P(y) and Q(y), not y = g*g.

    o   The Ref line on the betacf, betai, erf, erfc, gammln, gammp,
	gammq, gcf, gser, inverfc, invbetai and invgammp help pages
	lacked a full stop and ran into the sentence after it.

    o   GAMMA and LGAMMA hold the Lanczos coefficients the GNU
	Scientific Library uses, which only the gammln page said; their
	own pages now say it too. gammpapprox and betaiapprox are no
	longer titled as quadrature approximations, which in this
	package they never were.

    o   The 0.1.4 entries below are corrected where they were wrong.
	The EXP error figures were relative errors in units of
	.Machine$double.eps, not ulp, and the shortcut was taken on
	every call whose result is finite and nonzero, not on every
	call. The old EXP also returned Inf at
	log(.Machine$double.xmax) itself. Its NaN began near 2e78
	rather than 1e78, came back instead of 0 for very large
	negative arguments as well, and was nearly but not quite total
	past 1e82.  The overflow warning below 0.9 *
	.Machine$double.xmax is new in 0.1.4, not kept from before, and
	the 0.1.4 argument check did not reach every argument it said
	it did. Smaller corrections fix the list of bare titles and,
	under 0.1.0, which functions carry an attribution.

                        Changes in version 0.1.4                        

    o   EXP was not running its own algorithm. The range reduction left
	xexp = x/ln2 unrounded, so the reduced argument g never grew
	past about 1e-13, the abs(g) < sqrt(eps) shortcut was taken on
	every call whose result is finite and nonzero, and the rational
	approximation under it was dead code there. What came back was
	2^(x/ln2) and nothing else, up to 223 eps off in relative terms
	(about 444 ulp) at the ends of the range, and Inf at
	log(.Machine$double.xmax) itself, where x/ln2 rounds to 1024.
	xexp is now rounded to the nearest integer, which is what puts
	g in the interval abs(g) <= ln2/2 the coefficients were fitted
	on. The shortcut is gone with it: once g can be nonzero, taking
	exp(g) as 1 throws away eight digits, and the rational form is
	exact at g = 0 anyway. The final scaling is done in two halves,
	because 2^xexp on its own overflows to Inf, and underflows to
	0, at exponents where the result is still a finite nonzero
	number. Worst relative error over the whole range is now about
	1.5 eps rather than 223, about 2 ulp.

    o   EXP returned NaN instead of Inf for very large arguments, and
	NaN instead of 0 for very large negative ones, from about 2e78
	in magnitude and for nearly every argument past about 1e82.
	The overflow guard sat at 0.9 * .Machine$double.xmax, which is
	nowhere near where exp overflows, so such an argument reached a
	range reduction that could not reduce it: g grew with x until
	the numerator and the denominator of the rational form both
	overflowed, and their quotient was NaN. The guard is now at
	log(.Machine$double.xmax) going up and at -1075*ln2 going down,
	the latter being where exp falls under half the least
	subnormal. Overflow now warns and returns Inf for every
	argument past the upper limit, where it used to warn only past
	0.9 * .Machine$double.xmax; underflow returns 0 quietly. Both
	limits agree with exp to the last double.

    o   EXP(-Inf) returned -Inf. The branch for it had been the +Inf
	branch with the sign flipped, so it handed the argument back
	instead of the limit. It returns 0, which is what exp does.

    o   Given a vector, the functions here that work a value at a time
	failed with "the condition has length > 1", the message R
	raises for an if whose condition is not a single value.  It
	names neither the function nor the reason. 130 argument
	positions across 64 functions, EXP, LOG, SQRT and the
	distribution functions among them, are now checked up front,
	and the error names the function and the argument and points at
	sapply. Arguments that do accept a vector and return the right
	answer for one, such as mu in Qnorm or x in Dnorm, are
	untouched. Each of the 64 help pages now names the arguments
	its own function constrains, so the ones that are scalar
	throughout and the ones that merely have a scalar control
	argument, such as standardize in mlr, can be told apart without
	reading the source.

    o   The Chol and LDLT examples lost their last line in the rendered
	help page. A percent sign starts a comment in Rd, so L %*% t(L)
	was cut back to L. Both are now escaped and the round trip back
	to M shows.

    o   Help page titles: invbetai was titled as the inverse of gammp,
	NORM, DENORM and ellipRange carried their bare names, and seven
	pairs of pages shared one title (conv and conv0, deconv and
	deconv0, gammp and gammq, trapez0 and trapez1, Run.test and
	run.p, Pbinom and Ppois, Qnorm and Qlnorm). Each title now says
	what its page is about.

    o   LOG, EXP and SQRT say that current CPUs provide them at the
	instruction level, so the R versions are there to be read.
	DESCRIPTION says the same of the package as a whole: it is best
	studied with its source open.

    o   Help pages brought back in line with the code. erf and erfc
	call gammp and gammq, not erfccheb; gammp and gammq call gser
	or gcf; betai calls betacf and gammln; inverfc goes through the
	normal quantile; GetP returns solve(H, g); the attribute set by
	MachEps3 and MachEps4 is "iteration"; the mlr columns are
	R-Student, COV-Ratio and DFFITS; NORM returns c(f, n); NashSVD
	takes any real matrix; GAMMA returns Inf at zero as well as at
	the negative integers; the runifLC recurrence adds k.

    o   Distribution parameters are named for what they are: mean and
	standard deviation for the normal and log-normal, location and
	scale for t, degrees of freedom for chi-square and F, rate for
	the gamma density, distribution and quantile functions, scale
	for Rgamma and Rgamma0, mean lambda for Poisson and rate alpha
	for Rexp.

    o   Spelling and wording fixed across the help pages, among them
	Decomposition, Meticulous, Numerical, commutative, array,
	lengths, chi-square and distribution, together with argument
	names and function names left over from copied pages.

                 Changes in version 0.1.3 (2026-09-10)                  

    o   Every help page now carries a runnable example. Where a base R
	equivalent exists the example shows both, so the agreement can
	be seen at a glance.

    o   Rbeta was wrong for every case except Beta(1, 1). It built the
	two gamma deviates with the shape and the scale arguments the
	other way round, so Rbeta(n, 2, 5) had mean 0.65 where the
	distribution has 2/7 = 0.286.

    o   Rgamma divided by bet in its alph == 1 branch where the other
	two branches multiply, so that one shape came out with mean
	1/bet instead of bet.

    o   Rgamma0 never scaled the accepted deviate by alph, so every
	shape returned the same Exp(1) times bet: mean 1 rather than 3
	for Rgamma0(n, 3, 1). It also now requires alph >= 1, which is
	the range its rejection step is valid over. Use Rgamma below
	that.

    o   simps13 had the Simpson weights 4 and 2 on the wrong points,
	which left it converging to the wrong value: 21.099 against a
	true 21.337 even at n = 60. It is now accurate to 1e-12 there.

    o   Both Simpson rules failed at their smallest legal n, 2 and 3,
	on a seq() with the wrong sign of step.

    o   The simps38 example asked for n = 10, which is not a multiple
	of 3, so the help page showed NULL.

    o   The deconv0 example divided by a spectrum containing a zero and
	printed Inf and NaN.

    o   The erfccheb title no longer claims a Chebyshev approximation,
	which it stopped using in 0.1.0.

                        Changes in version 0.1.2                        

    o   ChkFx left show.error.message holding a list instead of
	restoring it. options() returns the previous settings as a
	list, and that list was being passed back as the value. The
	restore now passes the list whole and runs from on.exit, so
	early returns are covered too.

    o   mlr(Plot = TRUE) no longer opens a device of its own and no
	longer leaves par() changed. It draws on the current device and
	restores the previous settings on exit.

    o   Diagnostics in mlr and deconv go through message() rather than
	cat(), so they can be suppressed and do not write to stdout.

    o   The ellipse examples no longer call dev.new().

    o   Packaging for CRAN: Authors@R replaces the free text author
	fields, the obsolete LazyLoad field is gone, and the reference
	manual is no longer shipped under inst/doc, since CRAN builds
	its own and the copy was 86 percent of the tarball.

                        Changes in version 0.1.1                        

    o   Qpois and Qbinom now follow the quantile convention of base R,
	the smallest k whose cumulative probability reaches p. They
	previously returned the largest k whose cumulative probability
	did not exceed p, one below stats::qpois and stats::qbinom for
	every p. The two now agree exactly over a wide parameter grid;
	see tests/.

    o   Qbinom(p, n, pe) returns n for p = 1, and both functions
	compare against a tolerance sized to the accuracy of Ppois and
	Pbinom, about 1e-12. Feeding a cumulative probability straight
	back in as p can still land on the other side of a tie, because
	those two are built from the incomplete gamma and beta rather
	than the saddle point algorithms base R uses.

                        Changes in version 0.1.0                        

    o   First release.

    o   Calculus, distribution functions, random variate generation,
	linear algebra, differential equations and optimization, sized
	for one semester.

    o   The special functions follow freely licensed reference
	implementations, each attributed in its own help page, and the
	distribution and quantile functions are built on them.  gammln
	uses the Lanczos g=7 coefficients of the GNU Scientific
	Library. gser, gcf, gammp and gammq follow the Cephes series
	and continued fraction as redistributed in ALGLIB. betacf and
	betai follow the continued fraction and symmetry transform of
	the GNU Scientific Library. inverfc uses the Cephes normal
	quantile ndtri.

    o   erf and erfc come from the incomplete gamma function through
	erf(x) = P(1/2, x^2) and erfc(x) = Q(1/2, x^2).  That needs no
	coefficient table of its own and stays accurate far into the
	tail: erfc holds to 1e-13 relative down to erfc(26) = 5.7e-296,
	where a rational fit in x alone has long since lost its
	significant digits.

    o   invgammp and invbetai are bracketed Newton iterations on the
	forward functions, following the strategy of gsl_cdf_gamma_Pinv
	and gsl_cdf_beta_Pinv. Above the median the residual is formed
	in the upper tail, which avoids the loss of about eight digits
	that a lower-tail residual suffers for p near 1.

    o   gammpapprox, betaiapprox and erfccheb are thin wrappers over
	gammp, betai and erfc.

    o   Every distribution function is checked against the base R
	equivalent over a wide parameter grid. See tests/.
