Skip to content

Commit 2df55bc

Browse files
committed
Be more specific that tol is really a xrtol
1 parent 2fed58d commit 2df55bc

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

src/quantilealgs.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,31 +49,31 @@ quantile_bisect(d::ContinuousUnivariateDistribution, p::Real) =
4949
# Distribution, with Application to the Inverse Gaussian Distribution
5050
# http://www.statsci.org/smyth/pubs/qinvgaussPreprint.pdf
5151

52-
function newton_impl(Δ, xs::T=mode(d), tol::Real=1e-12) where {T}
52+
function newton_impl(Δ, xs::T=mode(d), xrtol::Real=1e-12) where {T}
5353
x = xs - Δ(xs)
5454
@assert typeof(x) === T
5555
x0 = T(xs)
56-
while !isapprox(x, x0, atol=0, rtol=tol)
56+
while !isapprox(x, x0, atol=0, rtol=xrtol)
5757
x0 = x
5858
x = x0 - Δ(x0)
5959
end
6060
return x
6161
end
6262

63-
function newton((f,df), xs::T=mode(d), tol::Real=1e-12) where {T}
63+
function newton((f,df), xs::T=mode(d), xrtol::Real=1e-12) where {T}
6464
Δ(x) = f(x)/df(x)
65-
return newton_impl(Δ, xs, tol)
65+
return newton_impl(Δ, xs, xrtol)
6666
end
6767

68-
function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=mode(d), tol::Real=1e-12)
68+
function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=mode(d), xrtol::Real=1e-12)
6969
f(x) = cdf(d, x) - p
7070
df(x) = pdf(d, x)
7171
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
7272
Δ(x) = f(x)/df(x)
7373
x = xs - Δ(xs)
7474
T = typeof(x)
7575
if 0 < p < 1
76-
return newton((f, df), T(xs), tol)
76+
return newton((f, df), T(xs), xrtol)
7777
elseif p == 0
7878
return T(minimum(d))
7979
elseif p == 1
@@ -83,15 +83,15 @@ function quantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=
8383
end
8484
end
8585

86-
function cquantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=mode(d), tol::Real=1e-12)
86+
function cquantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real=mode(d), xrtol::Real=1e-12)
8787
f(x) = p - ccdf(d, x)
8888
df(x) = pdf(d, x)
8989
# FIXME: can this be expressed via `promote_type()`? Test coverage missing.
9090
Δ(x) = f(x)/df(x)
9191
x = xs - Δ(xs)
9292
T = typeof(x)
9393
if 0 < p < 1
94-
return newton((f, df), T(xs), tol)
94+
return newton((f, df), T(xs), xrtol)
9595
elseif p == 1
9696
return T(minimum(d))
9797
elseif p == 0
@@ -101,16 +101,16 @@ function cquantile_newton(d::ContinuousUnivariateDistribution, p::Real, xs::Real
101101
end
102102
end
103103

104-
function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
104+
function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), xrtol::Real=1e-12)
105105
T = typeof(lp - logpdf(d,xs))
106106
Δ_ver0(x) = exp(lp - logpdf(d,x) + logexpm1(max(logcdf(d,x)-lp,0)))
107107
Δ_ver1(x) = -exp(lp - logpdf(d,x) + log1mexp(min(logcdf(d,x)-lp,0)))
108108
if -Inf < lp < 0
109109
x0 = T(xs)
110110
if lp < logcdf(d,x0)
111-
return newton_impl(Δ_ver0, T(xs), tol)
111+
return newton_impl(Δ_ver0, T(xs), xrtol)
112112
else
113-
return newton_impl(Δ_ver1, T(xs), tol)
113+
return newton_impl(Δ_ver1, T(xs), xrtol)
114114
end
115115
return x
116116
elseif lp == -Inf
@@ -122,16 +122,16 @@ function invlogcdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Rea
122122
end
123123
end
124124

125-
function invlogccdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), tol::Real=1e-12)
125+
function invlogccdf_newton(d::ContinuousUnivariateDistribution, lp::Real, xs::Real=mode(d), xrtol::Real=1e-12)
126126
T = typeof(lp - logpdf(d,xs))
127127
Δ_ver0(x) = -exp(lp - logpdf(d,x) + logexpm1(max(logccdf(d,x)-lp,0)))
128128
Δ_ver1(x) = exp(lp - logpdf(d,x) + log1mexp(min(logccdf(d,x)-lp,0)))
129129
if -Inf < lp < 0
130130
x0 = T(xs)
131131
if lp < logccdf(d,x0)
132-
return newton_impl(Δ_ver0, T(xs), tol)
132+
return newton_impl(Δ_ver0, T(xs), xrtol)
133133
else
134-
return newton_impl(Δ_ver1, T(xs), tol)
134+
return newton_impl(Δ_ver1, T(xs), xrtol)
135135
end
136136
return x
137137
elseif lp == -Inf

0 commit comments

Comments
 (0)