Statistical functions
NORM.INV
Matches all 5 recorded answers
Recorded: 5 workbook cells. How we measure this · See the Rust code
Local names in 40 languages
| Language | Name in Excel |
|---|---|
| Arabic | NORM.INV |
| Bulgarian | NORM.INV |
| Czech | NORM.INV |
| Danish | NORM.INV |
| German | NORM.INV |
| Greek | NORM.INV |
| English (Australia) | NORM.INV |
| English (United Kingdom) | NORM.INV |
| English (United States) | NORM.INV |
| Spanish | INV.NORM |
| Estonian | NORM.INV |
| Finnish | NORMAALI.JAKAUMA.KÄÄNT |
| French | LOI.NORMALE.INVERSE.N |
| Hebrew | NORM.INV |
| Croatian | NORM.INV |
| Hungarian | NORM.INVERZ |
| Indonesian | NORM.INV |
| Italian | NORM.INV |
| Japanese | NORM.INV |
| Korean | NORM.INV |
| Lithuanian | NORM.INV |
| Latvian | NORM.INV |
| Norwegian | NORM.INV |
| Dutch | NORM.INV |
| Polish | ROZKŁ.NORMALNY.ODWR |
| Portuguese (Brazil) | NORM.INV |
| Portuguese (Portugal) | INV.NORMAL |
| Romanian | NORM.INV |
| Russian | НОРМ.ОБР |
| Slovak | NORM.INV |
| Slovenian | NORM.INV |
| Serbian (Latin) | NORM.INV |
| Swedish | NORM.INV |
| Thai | NORM.INV |
| Turkish | NORM.TERS |
| Ukrainian | NORM.INV |
| Vietnamese | NORM.INV |
| Chinese (Simplified) | NORM.INV |
| Chinese (Hong Kong) | NORM.INV |
| Chinese (Traditional) | NORM.INV |
Names from Microsoft's support site.
What it does
NORM.INV(probability, mean, standard_dev)
NORM.INV(probability, mean, standard_dev) returns the quantile of the normal distribution
with mean μ and standard deviation σ at probability p — the value x such that a normal
random variable falls below x with probability exactly p:
NORM.INV(p, μ, σ) = x where F(x; μ, σ) = p
Because the normal CDF standardizes, the whole function reduces to the standard normal quantile — the probit function — composed with an affine map:
x = μ + σ · Φ⁻¹(p)
= μ + σ √2 · erf⁻¹(2p − 1)
Domain and range. p must lie strictly inside (0, 1); p ≤ 0 and p ≥ 1 are documented
#NUM! conditions, and σ ≤ 0 is another. On (0, 1) the function is a strictly increasing
bijection onto the whole real line — so the range is unbounded, and it is unbounded in a very
sharp way: as p → 0⁺ and p → 1⁻ the result runs to ∓∞. There are no poles in the interior
and no branch cuts; Φ⁻¹ is analytic on (0, 1).
The endpoints are the entire difficulty. Differentiating the inverse relation,
d/dp Φ⁻¹(p) = 1 / φ(Φ⁻¹(p))
and φ vanishes faster than any power at ±∞, so the derivative blows up superpolynomially
at both ends. Concretely, near p = 0,
Φ⁻¹(p) ~ −√( 2 ln(1/p) − ln(2 ln(1/p)) − ln(2π) ) as p → 0⁺
so an absolute error δ in p produces an absolute error of roughly δ / φ(z) in the answer,
which for z = −6 is a factor of about 10^8. The inverse normal is ill-conditioned at the
tails by nature, not by implementation. No algorithm can do better than the conditioning
allows, and the practical consequence is that NORM.INV at extreme p is only as good as the
representation of p itself.
Special values and identities.
Φ⁻¹(1/2) = 0 exactly, so NORM.INV(0.5, μ, σ) = μ
Φ⁻¹(p) = −Φ⁻¹(1 − p) the reflection identity
NORM.INV(Φ(x), μ, σ) = x round-trip in x
Φ(NORM.INV(p, 0, 1)) = p round-trip in p
NORM.INV(0.5, μ, σ) = μ is the one input whose answer is exactly nameable and it is the
cheapest possible test of this surface.
Arguments
Microsoft's page gives three required arguments:
| Argument | Meaning | Required |
|---|---|---|
probability | "A probability corresponding to the normal distribution" | yes |
mean | "The arithmetic mean of the distribution" | yes |
standard_dev | "The standard deviation of the distribution" | yes |
Microsoft further notes that with mean = 0 and standard_dev = 1, NORM.INV "uses the
standard normal distribution".
The pinned catalogue supplies NORM.INV(probability, mean, standard_dev) with three required arguments.
Try it
Quirks
The documented algorithm
Microsoft's NORM.INV page states something that documentation of a mathematical function very
rarely states: how it is computed.
"Given a value for probability, NORM.INV seeks that value x such that NORM.DIST(x, mean, standard_dev, TRUE) = probability."
"Thus, precision of NORM.INV depends on precision of NORM.DIST."
The companion NORM.S.INV page says the same thing about its own pair and adds the phrase
"uses an iterative search technique".
Three consequences follow, and the Handbook states them as consequences of the documentation, not as observations of Excel:
NORM.INVis documented as a root-finder overNORM.DIST, not as a direct quantile approximation. That is architecturally different from every standard library implementation, which evaluates a rational approximation toΦ⁻¹directly.- Its accuracy is documented as bounded above by
NORM.DIST's. Whatever error the forward CDF carries is inherited, and then divided byφ(z)through the conditioning above — so the inherited error is amplified in the tails, not merely passed along. - Round-trip consistency is expected to be unusually good, and monotonicity is not
guaranteed. A search that terminates on a tolerance will reproduce
pwell by construction, while adjacentpvalues can land on the same or non-monotonexif the termination rule is coarse. Those are opposite predictions from the ones a direct rational approximation makes, which is what makes them worth testing.
Whether Excel today actually performs an iterative search is not something this page asserts. The documentation says so; the Handbook has not observed it, and no evidence record in its possession identifies this surface's op-graph.
Result and edge cases
Returns Number.
p = 0.5returnsμexactly, for every admissibleσ.pat the ends.p ≤ 0andp ≥ 1are documented#NUM!. The smallest positive double is about4.9 × 10⁻³²⁴, whose quantile is about−38.4; the largestpstrictly below1is1 − 2⁻⁵³, whose quantile is about8.13. The reachable range ofNORM.INV(p, 0, 1)is therefore roughly[−38.4, +8.13]and is wildly asymmetric — because probabilities near1are represented with absolute spacing2⁻⁵³while probabilities near0are represented with relative precision all the way into the subnormals. This asymmetry is a fact about binary64, not about the normal distribution, and it is the reason serious tail work is done withΦ(−z)rather than1 − Φ(z).σ ≤ 0is a documented#NUM!,σ = 0included.standard_devvery large ormeanvery large: the result isμ + σ zand can overflow; what Excel publishes at overflow is not established here.- Arrays. The recorded profile is
Custom; elementwise lifting is not settled.
Empty, missing and error arguments follow the shared call model; see Coercion and lifting.
Errors
As documented by Microsoft on the NORM.INV page (retrieved for this page):
| Error | Documented condition |
|---|---|
#VALUE! | Any argument is nonnumeric |
#NUM! | probability ≤ 0 or probability ≥ 1 |
#NUM! | standard_dev ≤ 0 |
Note that this page's #VALUE! row says "any argument", where the sibling NORM.DIST page
names only mean and standard_dev. The two pages describe the same coercion behaviour with
different completeness; NORM.INV's wording is the better one.
Error values in any argument propagate under the ordinary coercion rules.
How to implement
Numerical notes
1. The conditioning is the headline and it is not fixable. As derived above, the derivative
of Φ⁻¹ is 1/φ(Φ⁻¹(p)), which grows without bound at both ends. Any error in p — including
the rounding that put p into a double in the first place — is multiplied by that factor. At
p = 10⁻¹⁰ the amplification is enormous. A function that is correctly rounded at every
input is still delivering an answer whose meaning is limited by the input's representation.
The right way to state accuracy for this function is in terms of the round trip, not the
forward error.
2. Direct approximation is the standard route, and it is not what the documentation
describes. The reference algorithm is Wichura's AS 241 (Applied Statistics 37, 1988),
whose PPND16 gives about 16 significant digits over the whole representable range using three
rational approximations selected by region: |p − ½| ≤ 0.425 on the central branch, then two
tail branches parameterized in r = √(−ln min(p, 1−p)). This is what R's qnorm, Boost, and
most statistical libraries use. Earlier and weaker: A&S 26.2.22 (about 3 × 10⁻³ absolute) and
26.2.23 (about 4.5 × 10⁻⁴), the Beasley–Springer algorithm AS 111 with Moro's tail
modification, and Acklam's widely copied approximation — all fine for graphics and inadequate
for a reference. Anyone implementing this function today should start from AS 241.
3. A root-finder over the CDF is a defensible design with distinctive failure modes. If the documented description is accurate, the properties to expect are:
- Excellent round-trip in
p— the search terminates on that criterion, soNORM.DIST(NORM.INV(p, …), …, TRUE) ≈ pby construction; - Possible non-monotonicity in
xacross adjacentp, if the termination tolerance is loose relative to the localdx/dp; - Degrading accuracy in the tails at exactly the rate the conditioning predicts, because each evaluation of the forward CDF carries its own error and the search cannot beat it;
- Sensitivity to the bracketing strategy at extreme
p, where the initial bracket must already reach−38on one side.
Each of those is testable, and together they discriminate a search from a direct rational approximation. That is the highest-value experiment on this page.
4. Newton refinement is the bridge between the two designs. A standard high-accuracy
implementation evaluates a rational approximation and then applies one or two Halley or Newton
steps using the exact derivative φ(z):
z ← z − (Φ(z) − p) / φ(z) Newton
z ← z − u / (1 + z·u/2), u = (Φ(z) − p)/φ(z) Halley
Each step roughly squares (Newton) or cubes (Halley) the accuracy, and the derivative is available in closed form — which is why the inverse normal is one of the pleasanter quantiles to refine. An implementation that does this is using the forward CDF, which means its accuracy is also derivative of the CDF's, exactly as Microsoft's page says. The two descriptions are not as far apart as they first look.
5. Argument reduction. μ + σ z is a fused-multiply-add opportunity and a cancellation
opportunity: when μ is large and σ z is small, the result loses the information in z
entirely. This is the same ceiling described on NORM.DIST, and it is
invisible to any test that uses μ = 0.
6. The published assessment record. McCullough and Wilson's series in Computational Statistics & Data Analysis, and Knüsel's assessments of Excel's distribution functions, are the standing published examinations of this lane, with revisions reported around Excel 2003 and again when the dotted names arrived. Morten Welinder's Gnumeric work is the standard practical account of implementing this family in a spreadsheet, including the inverses. Named as literature; no figure from them is restated here.
Rust code
Show the CalcFunc source of this function
Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.
NORM.INV · 4 lines · calc-func/src/catalogue/distributions.rs on GitHub3 norm_inv "NORM.INV" (3, 3) [V "probability", V "mean", V "standard_dev"] |s, a, sv| {
let [p, m, sd_] = nums::<3>(s, a)?;
out(s, nl::norm_inv_kernel(p, m, sd_))
}
Kernels shared with other functions
numscatalogue/distributionsbinary_withported/excel_numericexcel_x87_mulported/excel_numericmulported/excel_numeric/x87phi_kernelported/normal_dist_commonvalidate_positive_sigmaported/normal_log_familyvalidate_probability_open_unitported/normal_log_familyinverse_standard_normal_acklam_refinedported/normal_log_familyinverse_standard_normalported/normal_log_familynorm_inv_kernelported/normal_log_family
Argument and result plumbing
No implementation has been published with a Handbook test suite for this function.
Version differences
No comparison between specific Excel builds is recorded here yet. This does not establish that all builds behave alike.
Alternatives
Relationships
- NORM.DIST is the forward function and, per Microsoft's own text, the
thing
NORM.INVsearches over. The round trip in both directions is the natural test pair. - NORM.S.INV is the standardized case,
NORM.INV(p, 0, 1). CONFIDENCE.NORMis a direct consumer: a confidence half-width isNORM.S.INVof a tail probability, scaled.STANDARDIZEis the affine map this function composes with, run the other way.- Confused with:
NORM.DISTitself, by readers who want "the normal function" and pick the wrong direction; andNORM.INV(p, μ, σ)used withpexpressed as a percentage, where95is a#NUM!and0.95is what was meant.
Named variants
No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents