Excel 16.0 build 19929
Windows, bitness not recorded, CPU not recorded
41 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build.
Math and trigonometry functions
Close: 130 of 33,553 recorded answers differ in the last bits, worst 1 ULP
Everything else matches (33,550 in the answer bank and 3 workbook cells). Last-bit means a finite number within 16 ULP of Excel's. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | SINH |
| Bulgarian | SINH |
| Czech | SINH |
| Danish | SINH |
| German | SINH |
| Greek | SINH |
| English (Australia) | SINH |
| English (United Kingdom) | SINH |
| English (United States) | SINH |
| Spanish | SENOH |
| Estonian | SINH |
| Finnish | SINH |
| French | SINH |
| Hebrew | SINH |
| Croatian | SINH |
| Hungarian | SINH |
| Indonesian | SINH |
| Italian | SINH |
| Japanese | SINH |
| Korean | SINH |
| Lithuanian | SINH |
| Latvian | SINH |
| Norwegian | SINH |
| Dutch | SINH |
| Polish | SINH |
| Portuguese (Brazil) | SINH |
| Portuguese (Portugal) | SENH |
| Romanian | SINH |
| Russian | SINH |
| Slovak | SINH |
| Slovenian | SINH |
| Serbian (Latin) | SINH |
| Swedish | SINH |
| Thai | SINH |
| Turkish | SİNH işlevi |
| Ukrainian | SINH |
| Vietnamese | SINH |
| Chinese (Simplified) | SINH |
| Chinese (Hong Kong) | SINH |
| Chinese (Traditional) | SINH |
Names from Microsoft's support site.
SINH(number)
SINH(number) is the hyperbolic sine:
sinh x = (e^x - e^(-x)) / 2 = x + x^3/3! + x^5/5! + x^7/7! + ...
sinh is entire; no poles, no branch cuts.sinh is unbounded and strictly
increasing, hence a bijection from R onto R — which is why ASINH is defined everywhere
with no branch selection.sinh(-x) = -sinh(x).2*pi*i in the complex plane, which is the
same statement as sin(ix) = i sinh(x)).sinh x / x -> 1 as x -> 0, with leading correction x^3/6. As
x -> +infinity, sinh x ~ e^x / 2; the term e^(-x)/2 becomes negligible well before it
underflows.cosh^2 x - sinh^2 x = 1 — the hyperbola, in the same role the
Pythagorean identity plays for the circle. Addition formula:
sinh(x + y) = sinh x cosh y + cosh x sinh y.Abramowitz & Stegun treat the hyperbolic functions in chapter 4 section 4.5; the relations
sinh x = -i sin(ix) and sin x = -i sinh(ix) are the bridge to section 4.3.
Microsoft's page gives the signature, describes the argument as "any real number", and states that the formula for the hyperbolic sine is the one shown — the formula itself appears on that page only as an image, so it is not quotable from the article text. The definition above is the standard one and is stated here from the mathematical literature, not from the article.
| Argument | Meaning | Default |
|---|---|---|
number | Any real number. Required. | — |
There are no units here. SINH takes a number, not an angle, and the RADIANS apparatus that
attaches to SIN is meaningless for it. That is the position most often misunderstood: readers
arriving from SIN sometimes convert degrees first, which is simply wrong.
Returns Number.
The characteristic edge is overflow. Because sinh x ~ e^x/2, the result exceeds the
binary64 range at a moderate argument — somewhere just past the point where e^x itself
overflows, shifted by the halving. Beyond that point the mathematical value exists and is
finite; it is only the representation that fails.
Small arguments round-trip: below the point where x^3/6 is negligible against x, the
correctly rounded sinh x is x, so subnormals pass through unchanged.
SINH has two hazards, at opposite ends of its domain, and one identity that fixes each.
Near zero: cancellation. The naive formula (exp(x) - exp(-x))/2 subtracts two numbers that
both approach 1 as x -> 0. The difference is 2x to leading order, so the subtraction
discards approximately as many significant bits as |x| has leading zeros in its exponent —
total loss for small x. Relative accuracy is destroyed exactly where the function is smoothest.
The two standard remedies:
expm1. With u = expm1(x) (that is, e^x - 1 computed without the cancellation),
sinh x = (u + u/(1+u)) / 2. This form is the one Cody & Waite and the modern libms use in
the middle band, because expm1 is itself constructed to be accurate near zero.|x|: sinh x = x (1 + x^2/6 + x^4/120 + ...), truncated
as soon as the next term falls below the rounding of the leading x.Any implementation that uses the closed exponential form all the way down to zero has a relative-error profile that grows without bound as the argument shrinks. This is a straightforwardly detectable defect and it is worth probing for.
Near the top: overflow in the intermediate. The naive form computes e^x first, so it
overflows one halving earlier than the true result does — there is a band of arguments whose
sinh is representable but whose e^x is not. The standard remedy is the scaled
exponential: compute e^(x - k*ln2) and apply the power of two afterwards by exponent
manipulation, so the intermediate never leaves range. fdlibm's sinh and Cody & Waite both
do a version of this. Whether an implementation recovers that band is a clean, single-probe
test.
Symmetry. sinh is odd, so an implementation should compute on |x| and re-apply the sign,
which halves the branch count and guarantees exact antisymmetry. An implementation that does not
can return values for x and -x that are not exact negatives of each other — a small defect,
but one that breaks any downstream code relying on the parity identity.
A note on what "correct" means here. For arguments where the result overflows, an
implementation has three defensible outputs: an infinity, an overflow error, or a saturated
finite value. EV-MATH-0008 records that Excel's convention is the error. That is a
representation policy, not a numerical claim, and the Handbook keeps the two apart.
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.
SINH · 3 lines · calc-func/src/catalogue/math.rs on GitHub19 sinh "SINH" (1, 1) [V "number"] |s, a, sv| {
raw(s, a, ExcelRealPolicy::FINITE, k::sinh::sinh_kernel)
}
raw catalogue/mathbinary_with ported/excel_numericexcel_expm1_internal ported/excel_numericexpm1_internal_graph ported/excel_numericexcel_x87_sub ported/excel_numericexcel_x87_mul ported/excel_numericexcel_x87_div ported/excel_numericmul ported/excel_numeric/x87sub ported/excel_numeric/x87div ported/excel_numeric/x87pow2_positive ported/excel_numeric/x87_chainspow2 ported/excel_numeric/x87_chainsexp_ext ported/excel_numeric/x87_chainsexp_with ported/excel_numeric/x87_chainsexcel_exp ported/excel_numeric/x87_chainslog_with ported/excel_numeric/x87_chainsexcel_log ported/excel_numeric/x87_chainssinh_kernel ported/sinhNo 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 |
|---|---|---|
| 19929 | Windows, bitness not recorded, CPU not recorded | 41 |
| 20430 | Windows, 64-bit, CPU not recorded | 33,550 |
Agreement on these compared inputs does not establish agreement on unmeasured inputs.
Recorded environments and comparison details.
Windows, bitness not recorded, CPU not recorded
41 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build.
Windows, 64-bit, CPU not recorded
33,550 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.
COSH — the even primary; COSH and SINH differ by the sign in the numerator, and
COSH never approaches zero, which makes it the numerically easy one.TANH — SINH/COSH, bounded in (-1, 1). Computing TANH as that quotient is a
mistake for large arguments (see the TANH page).ASINH — the inverse, defined on all of R as ln(x + sqrt(x^2 + 1)). That closed form
is where the interesting cancellation in this family lives; see the ASINH page.SIN — the circular sibling, via sinh x = -i sin(ix). Bounded versus unbounded is the
practical difference and it is the whole reason their edge cases have nothing in common.EXP — the substrate of every reasonable implementation, and a co-subject of
EV-MATH-0008.SIN, by name similarity, and by readers who assume a degrees convention
applies.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents