Function note

The variance family uses raw moments with stored steps, and two tests switch it to a centered sum

FUNC.STDEV · FUNC.STDEV.P · FUNC.STDEV.S · FUNC.STDEVA · FUNC.STDEVP · FUNC.STDEVPA · FUNC.VAR · FUNC.VAR.P · FUNC.VAR.S · FUNC.VARA · FUNC.VARP · FUNC.VARPA

FN-VAR.S-001: The variance family uses raw moments with stored steps, and two tests switch it to a centered sum

Excel differs from the mathematical answer · measured · recorded 2026-11-04

With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, S the running RN sum of the n values and Q the running RN sum of RN(x*x), the sample variance is RN(RN(Q - RN(RN(S*S)/n))/(n-1)) and the population variance RN(RN(RN(n*Q) - RN(S*S))/RN(n*n)). Excel then uses a centered sum instead, adding RN(d*d) with d = RN(x - mean) and dividing by n-1 or n, when either of two stored tests holds: RN(RN(RN(S*S)/n)/Q) > 0.99, or RN(variance*1000) <= |RN(S/n)|. The STDEV functions are the root of this, rounded to 64 bits and then stored. So the answer depends on which path a call takes: the first two VAR.S calls below differ by a few input steps in two arguments, the first passes the 0.99 test and is correctly rounded, and the second takes the raw moments and lands 76 units high. The next pair shows the size test: scaling the inputs by 4 leaves the first path.

Call and input routeInputsExcelCorrect valueRecorded in
VAR.S(0.8769085090206681, 1, 1.123091490979332)
cell-value2
number1: 0.8769085090206681
0x3fec0fa26efa7e14
number2: 1
0x3ff0000000000000
number3: 1.123091490979332
0x3ff1f82ec882c0f6
0.01515151515151495
0x3f8f07c1f07c1e94
—Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading
VAR.S(0.8769085090206679, 1, 1.1230914909793321)
cell-value2
number1: 0.8769085090206679
0x3fec0fa26efa7e12
number2: 1
0x3ff0000000000000
number3: 1.1230914909793321
0x3ff1f82ec882c0f7
0.015151515151515138
0x3f8f07c1f07c1f00
0.015151515151515006
0x3f8f07c1f07c1eb4
Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading
VAR.S(3.244042371786199e-10, 0.00034050419142641947)
cell-value2
number1: 3.244042371786199e-10
0x3df64afacd3a935a
number2: 0.00034050419142641947
0x3f3650b65dc7a1d6
5.797144172853e-08
0x3e6f1f88c6bbc51a
—Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading
VAR.S(1.2976169487144796e-09, 0.0013620167657056779)
cell-value2
number1: 1.2976169487144796e-09
0x3e164afacd3a935a
number2: 0.0013620167657056779
0x3f5650b65dc7a1d6
9.275430676564799e-07
0x3eaf1f88c6bbc519
9.2754306765648e-07
0x3eaf1f88c6bbc51a
Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading
=VAR.S({157,376.82,189.207,12.38,12.473,483,306.24,324.1852,482.235,78})
formula-literal
As typed31907.480453381795
0x40df28debfbf8a84
31907.480453381777
0x40df28debfbf8a7f
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
STDEV.S(0, 1, 1.031052478719249)
cell-value2
number1: 0
0x0000000000000000
number2: 1
0x3ff0000000000000
number3: 1.031052478719249
0x3ff07f30e248f14c
0.5865198874587454
0x3fe2c4c55ae2d85e
—Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading

Correct value: Exact rational variance of the binary64 inputs, correctly rounded.

Correct value: Exact rational variance of the binary64 inputs, correctly rounded.

Correct value: Exact rational variance of the binary64 inputs, correctly rounded.

Basis: All 14,679 recorded rows of the twelve functions match: VAR.S, VAR.P, VAR, VARP, VARA, VARPA, STDEV.S, STDEV.P, STDEV, STDEVP, STDEVA and STDEVPA. Six of those rows separate the stored steps from plain binary64. 910 fresh scalar variance readings (Excel build 20527) replay exactly in rational arithmetic. Four cancellation edges were bisected to adjacent inputs; sixteen triples chosen to separate the stored ratio from 0.99*Q and from a division by 0.99 all agree with the ratio, where 0.99*Q misses all 16 and the division 14. Seven of eight magnitude brackets reach adjacent inputs, and sixteen chosen roots all need the 64-bit root followed by a store.

Inferred: These tests were located with scalar arguments in separate cells; that the same edges hold for ranges and arrays is inferred, and their readings have not been taken. RN(variance*1000) <= |mean| is not separated from the rearrangement variance <= |mean|/1000. That a raw moment which overflows also takes the centered sum is inferred from recorded answers that stay finite.

Open: Whether the two tests keep the same edges for ranges and arrays.

Evidence and capture sources

Machine-readable note records