Silent divergences: formulas that return different values in Excel for the web, Google Sheets and LibreOffice — no error, just a different number

A silent divergence is the expensive kind. All three of the engines this harness runs — Google Sheets, LibreOffice Calc 25.8.7.3 and Excel for the web — returned an ordinary value for the same formula. Nobody returned #NAME?, #VALUE! or any other error. And the values are different. Nothing on screen says so: the cell just holds a different number, or a string of a different length, than it held in the application the workbook came from.

This is not the quirks list. The quirks catalog asks whether one executed engine matches Microsoft’s documented behaviour for the desktop product — documentation on one side, measurement on the other. This page consults no documentation at all. Every row here is measurement against measurement: three executed engines, one formula, three values that do not agree. A formula can appear on both pages, on one, or on neither.

55 silent divergences across 42 functions: 4 — All three differ; 18 — Google Sheets differs; 14 — LibreOffice differs; 19 — Excel for the web differs.

Where each column comes from

How to read this table

Two engines landing on the same value does not make them right. Nothing on this page ranks the engines — a row tells you they disagree, and which one is the odd one out, never which one is correct.

The Δ column is the spread between the largest and smallest value on the row, and it is filled in only where all three values are numbers. Many rows are a last-digit difference after ROUND(…,9): a real divergence, and a tiny one. The Δ column is there so you can tell those apart at a glance from the rows where a value flips sign or shifts by π.

Invisible and ambiguous characters are printed as their code point — U+00A0 for a non-breaking space, U+0009 for a tab, U+FFFD for the Unicode replacement character. Several rows differ by nothing else, and rendering them literally would show two identical-looking cells.

Volatile functions are excluded from the comparison: RAND, RANDBETWEEN, RANDARRAY, NOW, TODAY, INFO and CELL are designed to return a different answer on every recalculation, so a difference between two runs on two days says nothing about the engines. Errors are excluded too, by definition: if any engine returned an error the divergence was not silent, and it belongs on the quirks list instead.

55 executed cases, sorted by which engine is the odd one out, then by function.
Function Formula Google Sheets LibreOffice Calc 25.8.7.3 Excel for the web Δ Odd one out Read more
ASC =ASC("A123 ") A123U+0020executed 2026-08-31 A123U+3000executed 2026-08-31 · all 4 builds agree A123U+3000executed 2026-09-01 All three differ
IMSQRT =IMSQRT("-4") 1.22464679914735E-16+2iexecuted 2026-08-31 2iexecuted 2026-08-31 · all 4 builds agree 1.22514845490862E-16+2iexecuted 2026-09-01 All three differ SORT descending in Google Sheets: is_ascending vs sort_order
IMSQRT =IMSQRT("-1") 6.12323399573677E-17+iexecuted 2026-08-31 iexecuted 2026-08-31differs across builds: 24.2.0.3 → 1i; 24.8.7.2 → 1i 6.1257422745431E-17+iexecuted 2026-09-01 All three differ SORT descending in Google Sheets: is_ascending vs sort_order
MIDB =MIDB("EXCEL",2,2) executed 2026-08-31 U+0020U+0020executed 2026-08-31 · all 4 builds agree XCexecuted 2026-09-01 All three differ LENB and CJK text: byte counts that don't match the docs
ACOT =ROUND(ACOT(-2),9) -0.463647609executed 2026-08-31 2.677945045executed 2026-09-04 · all 4 builds agree 2.677945045executed 2026-09-01 3.14 Google Sheets differs ACOT of a negative number is off by pi in Google Sheets versus Excel and LibreOffice
CONFIDENCE =ROUND(CONFIDENCE(A2,A3,A4),9) 0.692951913executed 2026-08-31 0.692951912executed 2026-08-31 · all 4 builds agree 0.692951912executed 2026-09-01 1e-09 Google Sheets differs
CONFIDENCE =ROUND(CONFIDENCE(A2,A3,50.9),9) 0.692951913executed 2026-08-31 0.692951912executed 2026-08-31 · all 4 builds agree 0.692951912executed 2026-09-01 1e-09 Google Sheets differs
CONFIDENCE.NORM =ROUND(CONFIDENCE.NORM(A2,A3,A4),9) 0.692951913executed 2026-08-31 0.692951912executed 2026-08-31 · all 4 builds agree 0.692951912executed 2026-09-01 1e-09 Google Sheets differs
CONFIDENCE.NORM =ROUND(CONFIDENCE.NORM(A2,A3,50.9),9) 0.692951913executed 2026-08-31 0.692951912executed 2026-08-31 · all 4 builds agree 0.692951912executed 2026-09-01 1e-09 Google Sheets differs
DISC =ROUND(DISC(DATE(2018,7,1),DATE(2048,1,1),97.975,100,1),12) 0.000686345065executed 2026-08-31 0.000686384169executed 2026-08-31 · all 4 builds agree 0.000686384169executed 2026-09-01 3.91e-08 Google Sheets differs Bond and treasury functions after a migration: what actually breaks
When the documentation is wrong: 29 vendor doc defects found by execution
HYPGEOMDIST =ROUND(HYPGEOMDIST(1.9,4.9,8.9,20.9),12) 0.2724458204executed 2026-08-31 0.363261093911executed 2026-08-31 · all 4 builds agree 0.363261093911executed 2026-09-01 0.0908 Google Sheets differs
LOGINV =ROUND(LOGINV(A2,A3,A4),10) 4.00002521executed 2026-08-31 4.0000252187executed 2026-08-31 · all 4 builds agree 4.0000252187executed 2026-09-01 8.7e-09 Google Sheets differs
LOGINV =ROUND(LOGINV(LOGNORMDIST(4,3.5,1.2),3.5,1.2),10) 3.999999991executed 2026-08-31 4executed 2026-08-31 · all 4 builds agree 4executed 2026-09-01 9e-09 Google Sheets differs
LOGNORM.INV =ROUND(LOGNORM.INV(A2,A3,A4),10) 4.00002521executed 2026-08-31 4.0000252187executed 2026-08-31 · all 4 builds agree 4.0000252187executed 2026-09-01 8.7e-09 Google Sheets differs
LOGNORM.INV =ROUND(LOGNORM.INV(LOGNORM.DIST(4,3.5,1.2,TRUE),3.5,1.2),10) 3.999999991executed 2026-08-31 4executed 2026-08-31 · all 4 builds agree 4executed 2026-09-01 9e-09 Google Sheets differs
NORMSINV =ROUND(NORMSINV(0.9088),8) 1.33340174executed 2026-08-31 1.33340175executed 2026-08-31 · all 4 builds agree 1.33340175executed 2026-09-01 1e-08 Google Sheets differs
SORT =SORT(A1:A5,1,-1) 1executed 2026-08-29 5executed 2026-07-29differs across builds: 24.2.0.3 → #NAME? 5executed 2026-09-01 4 Google Sheets differs Which LibreOffice version for VSTACK, TEXTSPLIT, TAKE & DROP?
SORT descending in Google Sheets: is_ascending vs sort_order
Your function exists but your file cannot say so: _xlfn storage tokens
TO_DOLLARS =ISNUMBER(TO_DOLLARS(5)) TRUEexecuted 2026-09-01 FALSEexecuted 2026-09-01 · all 4 builds agree FALSEexecuted 2026-09-01 Google Sheets differs Google-only functions: what ports to Excel and LibreOffice, and what does not
TO_PERCENT =ISNUMBER(TO_PERCENT(0.5)) TRUEexecuted 2026-09-01 FALSEexecuted 2026-09-01 · all 4 builds agree FALSEexecuted 2026-09-01 Google Sheets differs Google-only functions: what ports to Excel and LibreOffice, and what does not
TO_PURE_NUMBER =ISTEXT(TO_PURE_NUMBER("abc")) TRUEexecuted 2026-09-01 FALSEexecuted 2026-09-01 · all 4 builds agree FALSEexecuted 2026-09-01 Google Sheets differs Google-only functions: what ports to Excel and LibreOffice, and what does not
When the documentation is wrong: 29 vendor doc defects found by execution
TO_TEXT =ISTEXT(TO_TEXT(24)) TRUEexecuted 2026-09-01 FALSEexecuted 2026-09-01 · all 4 builds agree FALSEexecuted 2026-09-01 Google Sheets differs Google-only functions: what ports to Excel and LibreOffice, and what does not
TRIM =TRIM(CHAR(9)&"Hello") Helloexecuted 2026-08-29 U+0009Helloexecuted 2026-09-04 · all 4 builds agree U+0009Helloexecuted 2026-09-01 Google Sheets differs TRIM strips tabs and line breaks in Google Sheets but keeps them in Excel and LibreOffice
COUNT =COUNT(A1:A1) 0executed 2026-08-29 1executed 2026-07-29 · all 4 builds agree 0executed 2026-09-01 1 LibreOffice differs COUNT counts booleans differently in LibreOffice vs Excel
COUNT =COUNT(A1:A6) 2executed 2026-08-29 3executed 2026-07-29 · all 4 builds agree 2executed 2026-09-01 1 LibreOffice differs COUNT counts booleans differently in LibreOffice vs Excel
DURATION =ROUND(DURATION(DATE(2018,7,1),DATE(2048,1,1),0.08,0.09,2,1),7) 10.9191453executed 2026-08-31 10.921574executed 2026-08-31 · all 4 builds agree 10.9191453executed 2026-09-01 0.00243 LibreOffice differs Bond and treasury functions after a migration: what actually breaks
Every error code LibreOffice reports as #VALUE!
INTRATE =ROUND(INTRATE(A2,A3,A4,A5),10) 0.05768executed 2026-08-31 0.0583280899executed 2026-08-31 · all 4 builds agree 0.05768executed 2026-09-01 0.000648 LibreOffice differs Bond and treasury functions after a migration: what actually breaks
INTRATE =ROUND(INTRATE(A2,A3,A4,A5,0),10) 0.05768executed 2026-08-31 0.0583280899executed 2026-08-31 · all 4 builds agree 0.05768executed 2026-09-01 0.000648 LibreOffice differs Bond and treasury functions after a migration: what actually breaks
ISNUMBER =ISNUMBER(TRUE) FALSEexecuted 2026-08-29 TRUEexecuted 2026-07-29 · all 4 builds agree FALSEexecuted 2026-09-01 LibreOffice differs MAXA, MINA, AVERAGEA, VARPA vs MAX, MIN, AVERAGE, VAR.P
DOLLARDE and DOLLARFR: fractional bond prices across engines
FVSCHEDULE: LibreOffice drops text in the rate schedule
ISNUMBER(TRUE) is FALSE in Excel but TRUE in LibreOffice
TYPE(TRUE): Excel 4 vs LibreOffice 1
MDURATION =ROUND(MDURATION(A2,A3,A4,A5,A6,A7),10) 5.735669814executed 2026-08-31 5.7339235771executed 2026-08-31 · all 4 builds agree 5.7356698139executed 2026-09-01 0.00175 LibreOffice differs Bond and treasury functions after a migration: what actually breaks
Every error code LibreOffice reports as #VALUE!
MDURATION =ROUND(MDURATION(A2,A3,A4,A5,A6,A7),3) 5.736executed 2026-08-31 5.734executed 2026-08-31 · all 4 builds agree 5.736executed 2026-09-01 0.002 LibreOffice differs Bond and treasury functions after a migration: what actually breaks
Every error code LibreOffice reports as #VALUE!
MINA =MINA(A1:A5) 0executed 2026-08-31 FALSEexecuted 2026-08-31 · all 4 builds agree 0executed 2026-09-01 LibreOffice differs MAXA, MINA, AVERAGEA, VARPA vs MAX, MIN, AVERAGE, VAR.P
When the documentation is wrong: 29 vendor doc defects found by execution
MINA =MINA(A1:A2) 1executed 2026-08-31 TRUEexecuted 2026-08-31 · all 4 builds agree 1executed 2026-09-01 LibreOffice differs MAXA, MINA, AVERAGEA, VARPA vs MAX, MIN, AVERAGE, VAR.P
When the documentation is wrong: 29 vendor doc defects found by execution
REGEX =ISNA(REGEX("abc","z")) FALSEexecuted 2026-09-01 TRUEexecuted 2026-09-01 · all 4 builds agree FALSEexecuted 2026-09-01 LibreOffice differs Google-only functions: what ports to Excel and LibreOffice, and what does not
TRIM =TRIM(CHAR(160)&"Hello"&CHAR(160)) U+00A0HelloU+00A0executed 2026-08-29 U+FFFDHelloU+FFFDexecuted 2026-09-04 · all 4 builds agree U+00A0HelloU+00A0executed 2026-09-01 LibreOffice differs TRIM strips tabs and line breaks in Google Sheets but keeps them in Excel and LibreOffice
TYPE =TYPE(TRUE) 4executed 2026-08-29 1executed 2026-07-29 · all 4 builds agree 4executed 2026-09-01 3 LibreOffice differs MAXA, MINA, AVERAGEA, VARPA vs MAX, MIN, AVERAGE, VAR.P
TYPE(TRUE): Excel 4 vs LibreOffice 1
VAR.P =ROUND(VAR.P(A1:A3),4) 4executed 2026-08-31 8.2222executed 2026-08-31 · all 4 builds agree 4executed 2026-09-01 4.22 LibreOffice differs MAXA, MINA, AVERAGEA, VARPA vs MAX, MIN, AVERAGE, VAR.P
ASC =ASC("EXCEL") EXCELexecuted 2026-08-31 EXCELexecuted 2026-08-31 · all 4 builds agree EXCELexecuted 2026-09-01 Excel for the web differs
DAY =DAY(1) 31executed 2026-08-29 31executed 2026-07-29 · all 4 builds agree 1executed 2026-09-01 30 Excel for the web differs DAY(1), MONTH(1) and YEAR(1): Excel disagrees with Sheets and LibreOffice
FINDB =FINDB("b",A3) 5executed 2026-08-31 5executed 2026-08-31 · all 4 builds agree 3executed 2026-09-01 2 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
IMSQRT =IMSQRT("i") 0.707106781186548+0.707106781186548iexecuted 2026-08-31 0.707106781186548+0.707106781186548iexecuted 2026-08-31 · all 4 builds agree 0.707106781186548+0.707106781186547iexecuted 2026-09-01 Excel for the web differs SORT descending in Google Sheets: is_ascending vs sort_order
ISERROR =ISERROR(INDIRECT("'Nope'!B2")) TRUEexecuted 2026-08-29 TRUEexecuted 2026-08-28 · all 4 builds agree FALSEexecuted 2026-09-01 Excel for the web differs DOLLARDE and DOLLARFR: fractional bond prices across engines
ERROR.TYPE: LibreOffice returns #N/A where Excel returns 4 and 6
IFERROR doesn't catch INDIRECT's #REF! in LibreOffice
Every error code LibreOffice reports as #VALUE!
#NUM! vs #VALUE!: Excel vs LibreOffice
PERCENTRANK significance: Excel truncates, both other engines round
TYPE(TRUE): Excel 4 vs LibreOffice 1
VLOOKUP bad column index: Excel #REF! vs LibreOffice #VALUE!
ISREF =ISREF(INDIRECT("'Nope'!B2")) FALSEexecuted 2026-08-29 FALSEexecuted 2026-08-28 · all 4 builds agree TRUEexecuted 2026-09-01 Excel for the web differs IFERROR doesn't catch INDIRECT's #REF! in LibreOffice
LEFTB =LEFTB("EXCEL",2) executed 2026-08-31 executed 2026-08-31 · all 4 builds agree EXexecuted 2026-09-01 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
LENB =LENB("日本") 4executed 2026-08-31 4executed 2026-08-31 · all 4 builds agree 2executed 2026-09-01 2 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
MONTH =MONTH(1) 12executed 2026-08-29 12executed 2026-07-29 · all 4 builds agree 1executed 2026-09-01 11 Excel for the web differs DAY(1), MONTH(1) and YEAR(1): Excel disagrees with Sheets and LibreOffice
PERCENTRANK =PERCENTRANK(A1:A4,30) 0.667executed 2026-08-29 0.667executed 2026-08-04 · all 4 builds agree 0.666executed 2026-09-01 0.001 Excel for the web differs PERCENTRANK significance: Excel truncates, both other engines round
PERCENTRANK.EXC =PERCENTRANK.EXC(A2:A10,5.43,1) 0.4executed 2026-08-31 0.4executed 2026-08-31 · all 4 builds agree 0.3executed 2026-09-01 0.1 Excel for the web differs Every error code LibreOffice reports as #VALUE!
PERCENTRANK significance: Excel truncates, both other engines round
PERCENTRANK.INC =PERCENTRANK.INC(A2:A11,4) 0.556executed 2026-08-31 0.556executed 2026-08-31 · all 4 builds agree 0.555executed 2026-09-01 0.001 Excel for the web differs Every error code LibreOffice reports as #VALUE!
PERCENTRANK significance: Excel truncates, both other engines round
PERCENTRANK.INC =PERCENTRANK.INC(A2:A11,8) 0.667executed 2026-08-31 0.667executed 2026-08-31 · all 4 builds agree 0.666executed 2026-09-01 0.001 Excel for the web differs Every error code LibreOffice reports as #VALUE!
PERCENTRANK significance: Excel truncates, both other engines round
REGEXEXTRACT =COUNTA(REGEXEXTRACT(A2,"[A-Z][a-z]+",1)) 1executed 2026-08-31 1executed 2026-08-31 · all 4 builds agree 2executed 2026-09-01 1 Excel for the web differs Google-only functions: what ports to Excel and LibreOffice, and what does not
REPLACEB =REPLACEB("ABC",1,2,"x") xBCexecuted 2026-08-31 xBCexecuted 2026-08-31 · all 4 builds agree xCexecuted 2026-09-01 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
RIGHTB =RIGHTB("ABC",2) executed 2026-08-31 executed 2026-08-31 · all 4 builds agree BCexecuted 2026-09-01 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
SEARCHB =SEARCHB("B","ABC") 3executed 2026-08-31 3executed 2026-08-31 · all 4 builds agree 2executed 2026-09-01 1 Excel for the web differs LENB and CJK text: byte counts that don't match the docs
TRIMRANGE =COUNT(TRIMRANGE(A1:E10)) 0executed 2026-08-31 0executed 2026-08-31 · all 4 builds agree 4executed 2026-09-01 4 Excel for the web differs When the documentation is wrong: 29 vendor doc defects found by execution
YEAR =YEAR(1) 1899executed 2026-08-29 1899executed 2026-07-29 · all 4 builds agree 1900executed 2026-09-01 1 Excel for the web differs DAY(1), MONTH(1) and YEAR(1): Excel disagrees with Sheets and LibreOffice

Every value above was read back out of a recalculated workbook by our harness; the raw runs are in the repository and the method is on the methodology page. For the catalog of cases measured against Microsoft’s documentation instead, see the quirks list; for long-form writeups of individual cases, see the formula behavior guides.