Excel 16.0 build 20430
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
3,004 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.
Statistical functions
Known larger differences on 1,299 of 4,514 recorded answers
Of 4,514 recorded answers (4,508 in the answer bank and 6 workbook cells), 1,299 do not match: 145 differ by more than 16 ULP, 1,154 differ by at most 16 ULP. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | KURT |
| Bulgarian | KURT |
| Czech | KURT |
| Danish | TOPSTEJL |
| German | KURT |
| Greek | KURT |
| English (Australia) | KURT |
| English (United Kingdom) | KURT |
| English (United States) | KURT |
| Spanish | CURTOSIS |
| Estonian | KURT |
| Finnish | KURT |
| French | KURTOSIS |
| Hebrew | KURT |
| Croatian | KURT |
| Hungarian | CSÚCSOSSÁG |
| Indonesian | KURT |
| Italian | KURT |
| Japanese | KURT |
| Korean | KURT |
| Lithuanian | KURT |
| Latvian | KURT |
| Norwegian | KURT |
| Dutch | KURTOSIS |
| Polish | KURTOZA |
| Portuguese (Brazil) | KURT |
| Portuguese (Portugal) | CURT |
| Romanian | KURT |
| Russian | ЭКСЦЕСС |
| Slovak | KURT |
| Slovenian | KURT |
| Serbian (Latin) | KURT |
| Swedish | TOPPIGHET |
| Thai | KURT |
| Turkish | BASIKLIK işlevi |
| Ukrainian | KURT |
| Vietnamese | KURT |
| Chinese (Simplified) | KURT |
| Chinese (Hong Kong) | KURT |
| Chinese (Traditional) | KURT |
Names from Microsoft's support site.
KURT(number1, [number2], ...)
KURT(number1, [number2], …) returns the bias-corrected sample excess kurtosis of the
numeric values it admits. The estimator Microsoft documents is
KURT = [ n(n+1) / ((n−1)(n−2)(n−3)) ] · Σᵢ ( (xᵢ − x̄) / s )⁴
− 3(n−1)² / ((n−2)(n−3))
where x̄ is the sample mean and s is the sample standard deviation with the n − 1
denominator, the same s that STDEV.S returns.
Three separate conventions are baked into that one line, and every disagreement between statistical packages about "the kurtosis" is a disagreement about which of them applies:
β₂ − 3 = μ₄/μ₂² − 3, where μₖ is the k-th central moment.n(n+1)/((n−1)(n−2)(n−3)) factor is
the standard G₂ correction, which makes the estimator unbiased for the excess kurtosis
when the parent distribution is normal. In the taxonomy of Joanes and Gill (1998) this is
G₂, not the plug-in g₂ and not the b₂ variant; SAS and SPSS use G₂, several other
systems do not.s. Using n − 1 inside the standardisation and
then applying the G₂ factor on top is what makes the algebra come out.Domain. The formula requires n ≥ 4 — the factor (n−3) in both denominators is the
binding constraint — and s > 0. Range: the sample excess kurtosis of n points is
bounded below by −2·(n−1)/(n−2) + 3(n−1)²/((n−2)(n−3))-type expressions and above by a
finite value determined by n; unlike the population quantity it cannot be arbitrarily
large for fixed n. The population excess kurtosis is bounded below by −2 (attained by the
two-point distribution) and unbounded above.
Useful reference values, all exact and all cheap to check: four equally spaced points give
−1.2, which is the excess kurtosis of the continuous uniform distribution; a sample that is
exactly normal in its order statistics tends to 0; heavy-tailed samples give large positive
values. Kurtosis is not a measure of "peakedness" — that reading is a persistent
textbook error. It is a standardised fourth moment, and the fourth power means it is driven
almost entirely by the observations farthest from the mean. A single outlier moves KURT
more than the entire rest of the sample.
Returns Number.
s = 0, the standardisation divides by zero, #DIV/0!.20/6 and 27/2, both exactly representable, so a correct implementation returns the
uniform-distribution value for equally spaced points with only the fourth-power sum
contributing rounding.Σ(xᵢ − x̄)⁴ first overflows for |xᵢ − x̄| > about
1.3·10⁷⁷ and underflows below about 10⁻⁷⁷. See Numerical notes.KURT is not a lift kernel.| Error | Condition | Basis |
|---|---|---|
#DIV/0! | Fewer than four data points, or the sample standard deviation is zero | Documented by Microsoft on the KURT page; also what the defining formula requires |
#VALUE! | A directly-passed argument that cannot be converted to a number | Shared coercion rule, chapter 02 |
| propagated | An error value among the data | Shared coercion rule, chapter 02 |
KURT is the hardest of the elementary descriptive statistics to compute well, for a reason
that is entirely structural: it is a ratio of a fourth central moment to the square of a
second central moment, and both are differences of large quantities.
Cancellation. The one-pass "computational" route accumulates Σx, Σx², Σx³, Σx⁴
and reconstructs the central moments by the binomial expansion
μ₄ = (Σx⁴ − 4x̄Σx³ + 6x̄²Σx² − 4x̄³Σx + n x̄⁴)/n
For data with a small coefficient of variation this is catastrophic: the terms are of order
n·x̄⁴ while the result is of order n·σ⁴, so the relative error is inflated by
(x̄/σ)⁴. A sample with mean 10⁶ and spread 1 loses roughly twenty-four decimal digits — far
more than a double has. The estimator is then not merely inaccurate; it is arbitrary, and can
come out negative where the true value is positive. The canonical treatment is Chan, Golub and
LeVeque (1983) for the variance, extended to arbitrary order by Pébay, Formulas for Robust,
One-Pass Parallel Computation of Covariances and Arbitrary-Order Statistical Moments (Sandia
report SAND2008-6212), whose update relations are the standard modern reference for a stable
streaming fourth moment.
What a careful implementation does. Two passes: compute x̄ first (with a compensated or
pairwise sum), then accumulate the centred powers Σ(xᵢ − x̄)² and Σ(xᵢ − x̄)⁴ directly.
Optionally refine x̄ with a second-pass correction term Σ(xᵢ − x̄)/n, which is zero in
exact arithmetic and is a cheap error-cancelling trick. Standardise before the fourth power —
that is, accumulate Σz⁴ with z = (xᵢ − x̄)/s — to keep the summands near unity and avoid
the overflow and underflow bands mentioned above. Apply the two exactly-representable rational
factors last, and do the final subtraction in the order the formula is written, since the two
terms are of comparable size for near-normal data and their difference is the answer.
The subtraction at the end is itself a cancellation. For a near-normal sample the first
term is close to 3(n−1)²/((n−2)(n−3)) and the excess is a small difference of two moderate
numbers. Even with a perfect fourth-moment sum, a KURT near zero has few correct significant
digits in the relative sense — which is fine, because the quantity of interest is the absolute
excess, but it means a relative-error residual plate for KURT will look alarming near zero
and should be read as an absolute-error plate instead.
The published record on Excel's statistical accuracy is relevant background here and is worth naming precisely: McCullough and Wilson's papers on the accuracy of Excel's statistical procedures, and Morten Welinder's work on Gnumeric's statistical functions, both document one-pass moment accumulation as a recurring defect class in spreadsheet implementations. The Handbook does not assert what Excel does internally, and neither of those sources is a measurement of this surface.
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.
KURT · 3 lines · calc-func/src/catalogue/statistics.rs on GitHub46 kurt "KURT" (1, 255) [R "number1", R "number2"] |s, a, sv| {
out(s, k::moment_stats_family::kurt_kernel(&all(s, a, sv, Held::Numbers)?))
}
kurt_kernel · 33 lines · calc-func/src/ported/moment_stats_family.rs on GitHubpub(crate) fn kurt_kernel(values: &[f64]) -> Result<f64, WorksheetErrorCode> {
if values.len() < 4 {
return Err(WorksheetErrorCode::Div0);
}
let n = values.len();
let avg = mean(values);
let mut sumsq = 0.0;
let mut deltas = Vec::with_capacity(n);
for value in values {
let delta = *value - avg;
sumsq += delta * delta;
deltas.push(delta);
}
if sumsq == 0.0 {
return Err(WorksheetErrorCode::Div0);
}
let sample_std = (sumsq / (n as f64 - 1.0)).sqrt();
let standardized_sum = deltas
.iter()
.map(|delta| {
let z = *delta / sample_std;
let z2 = z * z;
z2 * z2
})
.sum::<f64>();
let n = n as f64;
Ok(
(n * (n + 1.0) * standardized_sum) / ((n - 1.0) * (n - 2.0) * (n - 3.0))
- (3.0 * (n - 1.0).powi(2)) / ((n - 2.0) * (n - 3.0)),
)
}
No implementation has been published with a Handbook test suite for this function.
The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.
| Excel 16.0 build | Platform and CPU | Captured inputs |
|---|---|---|
| 20430 | Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics | 3,004 |
The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.
Recorded environments and comparison details.
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
3,004 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.
KURT.P. A reader who wants the plug-in
g₂ = μ₄/μ₂² − 3 must compute it from DEVSQ and a fourth-power sum by
hand, or invert the G₂ correction algebraically.VAR.S — supply the s in the
denominator; any disagreement about s propagates to the fourth power.DEVSQ — the second-moment building block, and the natural surface to
compare against when checking whether the centred sums agree.SKEW, since both are called
"shape statistics" and both fail on small samples, but they fail at different n.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents