Excel 16.0 build 19929
Windows, bitness not recorded, CPU not recorded
36 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: 6 of 33,309 recorded answers differ in the last bits, worst 2 ULP
Everything else matches (33,306 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 | CSCH |
| Bulgarian | CSCH |
| Czech | CSCH |
| Danish | CSCH |
| German | CSCH |
| Greek | CSCH |
| English (Australia) | CSCH |
| English (United Kingdom) | CSCH |
| English (United States) | CSCH |
| Spanish | CSCH |
| Estonian | CSCH |
| Finnish | KOSEKH |
| French | CSCH |
| Hebrew | CSCH |
| Croatian | CSCH |
| Hungarian | CSCH |
| Indonesian | CSCH |
| Italian | CSCH |
| Japanese | CSCH |
| Korean | CSCH |
| Lithuanian | CSCH |
| Latvian | CSCH |
| Norwegian | CSCH |
| Dutch | COSECH |
| Polish | CSCH |
| Portuguese (Brazil) | CSCH |
| Portuguese (Portugal) | CSCH |
| Romanian | CSCH |
| Russian | CSCH |
| Slovak | CSCH |
| Slovenian | CSCH |
| Serbian (Latin) | CSCH |
| Swedish | CSCH |
| Thai | CSCH |
| Turkish | CSCH |
| Ukrainian | CSCH |
| Vietnamese | CSCH |
| Chinese (Simplified) | CSCH |
| Chinese (Hong Kong) | CSCH |
| Chinese (Traditional) | CSCH |
Names from Microsoft's support site.
CSCH(number)
CSCH(number) returns the hyperbolic cosecant.
csch x = 1 / sinh x = 2 / (e^x - e^{-x})
Microsoft's page describes it as the hyperbolic cosecant of an angle specified in radians. That phrasing is worth a note: the argument of a hyperbolic function is not an angle in the circular sense and there are no radians involved — it is a hyperbolic angle, twice the area of the corresponding hyperbolic sector. The wording appears to be inherited from the circular functions' documentation template. It changes nothing about the mathematics.
| Property | Statement |
|---|---|
| Domain | all real x except x = 0 |
| Range | (-∞, 0) ∪ (0, ∞) — every nonzero real is attained exactly once |
| Parity | odd: csch(-x) = -csch(x) |
| Pole | one, simple, at x = 0, with residue 1 |
| Laurent series at 0 | csch x = 1/x - x/6 + 7x³/360 - … (A&S 4.5.66) |
| Asymptotics | csch x ~ 2e^{-x} as x → +∞: decays to zero, never reaching it |
| Fundamental identity | coth²x - csch²x = 1 |
| Derivative | d/dx csch x = -csch x · coth x |
| Relation to circular | csch x = -i·csc(ix) |
| Monotone | strictly decreasing on (-∞, 0) and on (0, ∞) |
The shape is a single hyperbola-like curve on each side of the origin: unbounded at 0,
decaying exponentially to 0 at ±∞. Unlike its sibling COTH, which flattens
onto ±1, CSCH flattens onto 0 — so its large-argument behaviour is underflow, not
overflow, and that is the whole difference in their numerical stories.
The practical thresholds: csch x falls below the smallest normal double once x is above
about 710, and below the smallest subnormal at about 745. The correct answer there is 0, and
0 is representable, so nothing goes wrong.
| Argument | Meaning | Constraint (as documented) |
|---|---|---|
number | The hyperbolic angle. Required. | ABS(number) < 2^27 |
As on COTH, the constraint has no numerical motivation: csch needs no argument reduction,
and its correct value at 2^27 is 0. The bound reads like a documentation template applied
across the 2013 trigonometric batch. That reading is a hypothesis and is on the probe list.
The non_finite=allow value is, by contrast, entirely consistent with the mathematics here:
csch of a large argument underflows to zero, which is finite, so no non-finite result arises
from the value — only, potentially, from the pole.
Returns Number, never zero mathematically but zero by underflow for large arguments.
CSCH(0) — mathematically a pole. Microsoft's page states the magnitude constraint and
the non-numeric condition and says nothing about zero. #DIV/0! follows by analogy with
COT, whose page does state it, but nothing establishes it here.ABS(x) — the true value underflows to 0. Whether Excel returns 0 or something
else is unchecked; 0 is the mathematically correct rounded answer.CSCH of a negative argument is negative, including in the underflow
region, where the correct answer is negative zero if signed zeros are preserved and 0
otherwise. That distinction is invisible in most contexts and visible in 1/CSCH(x).csch has no zeros, so a 0 returned for an
argument below the underflow threshold would be a defect.csch x ≈ 1/x, so CSCH of a tiny argument is huge, overflowing only in the
subnormal range.As documented on Microsoft's CSCH page:
| Error | Condition |
|---|---|
#NUM! | ABS(number) is not less than 2^27 |
#VALUE! | number is non-numeric |
The zero case is not documented. Nothing else is documented.
CSCH is 1/SINH, and every hard question about it is really a question about sinh.
The cancellation, and the remedy. Written as (e^x - e^{-x})/2, sinh x cancels
catastrophically for small x: the two exponentials are both close to 1, and their difference
is close to 2x, so the leading digits are lost. This is the textbook example of subtractive
cancellation (A&S chapter 4.5; every numerical-analysis course). The standard remedy is
expm1: with t = expm1(x),
sinh x = ( t + t/(t+1) ) / 2
which never forms the difference of two near-equal quantities. fdlibm's s_sinh.c and Cephes'
sinh.c both branch this way, using a polynomial in x² for the smallest arguments and the
expm1 form up to moderate size. Excel has no EXPM1 on the worksheet surface, so a user who
writes (EXP(x)-EXP(-x))/2 by hand will get the cancellation no matter how good SINH and
CSCH are; the worksheet remedy is the series x + x³/6 + x⁵/120.
For CSCH specifically, the reciprocal reverses which end is dangerous.
sinh is small and its relative error is what propagates, so a stable
sinh gives a stable csch. Better still, use the Laurent series 1/x - x/6 + 7x³/360
(A&S 4.5.66) directly below about 2^-13: it avoids the division entirely and gives the
deviation from 1/x without cancellation.0, gradually then abruptly.
An implementation using 2·EXP(-x) reaches that boundary smoothly; one using 1/SINH(x)
reaches it at whatever point SINH stopped being finite.The one-line summary an implementer needs: never compute csch as the reciprocal of a
value that can overflow, and never compute sinh as a difference of exponentials.
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.
CSCH · 1 lines · calc-func/src/catalogue/math.rs on GitHub15 csch "CSCH" (1, 1) [V "number"] |s, a, sv| { unary(s, a, k::csch::csch_kernel) }
csch_kernel · 9 lines · calc-func/src/ported/csch.rs on GitHubpub fn csch_kernel(n: f64) -> Result<f64, WorksheetErrorCode> {
let sinh = crate::ported::sinh::sinh_kernel(n);
if sinh == 0.0 {
return Err(WorksheetErrorCode::Div0);
}
// Live Excel 16.0 b20326: CSCH(x)=1/SINH(x) 5/5; follows the SINH kernel.
let value = crate::ported::excel_numeric::excel_x87_recip(sinh);
Ok(if value.abs() < f64::MIN_POSITIVE { 0.0 } else { value })
}
unary 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_numericexcel_x87_recip ported/excel_numericmul ported/excel_numeric/x87sub ported/excel_numeric/x87div ported/excel_numeric/x87recip 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 | 36 |
| 20430 | Windows, 64-bit, CPU not recorded | 33,306 |
Agreement on these compared inputs does not establish agreement on unmeasured inputs.
Recorded environments and comparison details.
Windows, bitness not recorded, CPU not recorded
36 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,306 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.
SINH — the reciprocal, and the surface whose accuracy CSCH inherits. SINH has the
classic cancellation problem near zero; see below.SECH — the other hyperbolic reciprocal that decays to zero, but bounded above by 1 and
with no pole. SECH is the well-behaved one; CSCH is not.2^27 constraint, and the arg_domain_guard=none axis value. The two
pages diverge from their documentation in the same way and should be read together.coth²x - csch²x = 1 ties this surface to the
hyperbolic set; csch x = 1/sinh x and sinh is built from exp.ASINH — there is no ACSCH on the worksheet surface; ASINH(1/x) is the substitute,
and it is well conditioned, which makes it a good round-trip probe.csch x = -i·csc(ix). Same 1/x leading
term; opposite behaviour at infinity.IMCSCH — the complex version.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents