Math and trigonometry functions

ASINH

Matches all 4,537 recorded answers

Recorded: 4,534 in the answer bank and 3 workbook cells. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicASINH
BulgarianASINH
CzechARCSINH
DanishARCSINH
GermanASINH
GreekASINH
English (Australia)ASINH
English (United Kingdom)ASINH
English (United States)ASINH
SpanishASENOH
EstonianASINH
FinnishASINH
FrenchASINH
HebrewASINH
CroatianASINH
HungarianASINH
IndonesianASINH
ItalianASINH
JapaneseASINH
KoreanASINH
LithuanianASINH
LatvianASINH
NorwegianARCSINH
DutchASINH
PolishASINH
Portuguese (Brazil)ASINH
Portuguese (Portugal)ASENH
RomanianASINH
RussianASINH
SlovakASINH
SlovenianASINH
Serbian (Latin)ASINH
SwedishARCSINH
ThaiASINH
TurkishASİNH işlevi
UkrainianASINH
VietnameseASINH
Chinese (Simplified)ASINH
Chinese (Hong Kong)ASINH
Chinese (Traditional)ASINH

Names from Microsoft's support site.

What it does

ASINH(number)

ASINH(number) is the inverse hyperbolic sine.

asinh x  =  ln( x + sqrt(x^2 + 1) )
  • Domain: all real numbers. sinh is a strictly increasing bijection from R onto R, so its inverse needs no branch choice and has no domain restriction. Microsoft's Learn reference says exactly this: the argument is "any real number".
  • Range: all real numbers.
  • Parity: odd, exactly. asinh(-x) = -asinh(x). Because the square root is always at least |x|, the closed form above never cancels for positive x — but it cancels badly for negative x, which is why every implementation folds the sign. See the numerical notes.
  • Monotonicity: strictly increasing everywhere.
  • Derivative: d/dx asinh x = 1 / sqrt(x^2 + 1) — bounded by 1, positive, and smooth on the whole line. There are no singularities of any kind. ASINH is the best-conditioned function in its family and its difficulties are entirely about representation.
  • Series about zero: asinh x = x - x^3/6 + 3x^5/40 - ..., so asinh x -> x for small x and subnormals pass through unchanged in the mathematics. Excel's do not: see Result and edge cases.
  • Asymptotics: asinh x = ln(2x) + 1/(4x^2) - ... as x -> +infinity. Growth is logarithmic: every argument in the upper half of the double range maps into a narrow band of results, and at the top of binary64 the answer is a little over 710.
  • Relations: asinh x = sign(x) * acosh(sqrt(x^2 + 1)) and asinh x = atanh( x / sqrt(x^2 + 1) ); also asinh(sinh t) = t for every real t, which is the round trip Microsoft's Learn reference states.
  • Complex continuation: branch cuts along the imaginary axis outside [-i, i]. Nothing on the real line is cut, which is the precise reason the real domain is unrestricted.

Abramowitz & Stegun give the logarithmic closed form in chapter 4 section 4.6.

Arguments

ArgumentMeaningDefault
numberAny real number. Required.—

That is Microsoft's own wording from the Learn reference. The Handbook flags it as the most consequential documented statement on this page, because what is on record upstream about the implementation contradicts it — see Result and edge cases below.

There are no units here. ASINH takes a number, not an angle; the RADIANS/DEGREES apparatus that attaches to the circular inverses is meaningless for it.

Try it

Input cells (optional)

Example: {"B2": 3, "B3": 4}. A1 holds the formula. Other cells need values before a formula can read them.

Enter a formula, then calculate.

Runs locally in your browser with OneCalc. Its answer may differ from Excel. Use English function names and commas between arguments.

Quirks

Result and edge cases

Returns Number.

  • Zero returns zero, and an odd implementation preserves the sign of zero.
  • Subnormals and very small arguments do not pass through. In the recorded rows every |x| up to 1.05E-16, including every subnormal, gives 0, and slightly larger inputs move in steps of about 2.2E-16 (FN-ASINH-001).
  • Negative arguments are the case the closed form handles badly and the oddness handles for free.
  • Very large arguments are the interesting case, and the reason this page carries an evidence record.

The overflow boundary — the substantive finding on this page

Mathematically, asinh of the largest finite double is a modest number just above 710: finite, representable, and nowhere near any limit. But the closed form ln(x + sqrt(x^2 + 1)) forms x^2 first, and x^2 overflows binary64 as soon as |x| exceeds the square root of the largest finite double — approximately 1.34e154. Above that point the intermediate is infinite while the answer is small.

EV-MATH-0009 is an excel-math-deviation record whose subject is FUNC.ASINH, and what it identifies is exactly this: the substrate is the literal ln(x + sqrt(x^2+1)), the x^2 intermediate overflows, and an error is published well below where the mathematical result would require one. The record states the mechanism and, in its own words, publishes no count; its reader warning says that an exactness claim without a denominator is not a count and that this record publishes none. The Handbook repeats the shape and not the figures, which are rendered mechanically beside this page.

The documentation-versus-record divergence, stated plainly. Microsoft's Learn reference documents the argument as "any real number" and lists no error condition. The identified substrate makes an entire band of real numbers — more than a hundred decades of the double range, from about 1.34e154 to the largest finite double — fail. Documentation and behaviour disagree, and the Handbook publishes both.

  • Arrays lift elementwise.

Errors

There is no mathematical domain error for ASINH. The #NUM! above is an artefact of an evaluation form, not a statement about the function.

ASINH is LN(|x|+SQRT(x*x+1)) with every step stored, so small inputs lose their digits

ASINH is not the correctly rounded inverse hyperbolic sine. Its answers are those of SIGN(x)*LN(|x|+SQRT(x*x+1)), with x*x, the +1, the SQRT and the |x|+root each rounded to 64 bits and then to 53 bits before the next step, and the LN rounded to binary64. That route loses most of the digits of a small input: once x*x+1 rounds to 1, the answer is LN of |x|+1 after rounding, so it moves in steps of about 2.2E-16. ASINH(-1.4901631254755754E-16) is -2.22E-16, about 1.5 times the true value, and in the recorded rows every |x| up to 1.05E-16, including every subnormal, gives 0 on either sign. At the other end the x*x overflows: answers are finite up to the largest recorded input below it, 9.23E153, and #NUM! from the next recorded input, 2.38E154, although the true value there is about 356. In Excel build 20430 this route reproduces all 4,534 recorded rows (3,017 distinct inputs): 3,427 numbers and 1,107 #NUM!. The correctly rounded asinh matches only 1,224 of the 3,427.

Explanation (inferred): That Excel's code is this expression, in this order, is inferred; what is measured is that the route reproduces every recorded row. The overflow boundary at |x| = 2^512, about 1.34E154, is inferred from x*x overflowing there: the recorded rows only bracket it, between 9.23E153 and 2.38E154. Excel reads a subnormal written to a cell back as 0, so the 0 at subnormal inputs may come from that step and not from this route.

FormulaExcelMathematical value
ASINH(-1.0126103340069186e-11)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: -1.0126103340069186e-11
0xbda6447d498e6f26

mpmath asinh at 2000 bits, rounded to the nearest binary64

-1.0126122162949859e-11
0xbda6447fffff840a
-1.0126103340069186e-11
0xbda6447d498e6f26
ASINH(-1.4901631254755754e-16)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: -1.4901631254755754e-16
0xbca579bb4790a498

mpmath asinh at 2000 bits, rounded to the nearest binary64

-2.2204460492503128e-16
0xbcafffffffffffff
-1.4901631254755754e-16
0xbca579bb4790a498
ASINH(1.0501151062119094e-16)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: 1.0501151062119094e-16
0x3c9e447b5a2fd072

mpmath asinh at 2000 bits, rounded to the nearest binary64

0
0x0000000000000000
1.0501151062119094e-16
0x3c9e447b5a2fd072
ASINH(5e-324)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: 5e-324
0x0000000000000001

mpmath asinh at 2000 bits, rounded to the nearest binary64

0
0x0000000000000000
5e-324
0x0000000000000001
ASINH(7.193439987815484e-08)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: 7.193439987815484e-08
0x3e734f4b587c834b

mpmath asinh at 2000 bits, rounded to the nearest binary64

7.19343998474134e-08
0x3e734f4b58591206
7.193439987815477e-08
0x3e734f4b587c8346
ASINH(9.234293629925394e+153)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: 9.234293629925394e+153
0x5fe60a092f72d845

355.2115905310072
0x40763362acc0ad1b
—
ASINH(2.3842260672008416e+154)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

number: 2.3842260672008416e+154
0x5ffc73a8ae6c7c25

mpmath asinh at 2000 bits, rounded to the nearest binary64

#NUM!356.1601260731963
0x4076428fe05b79d7

Inputs, build details and evidence

How to implement

Numerical notes

The closed form is correct and, taken literally, fails at three places. All three are standard, and all three have one-line remedies.

1. Cancellation for negative arguments. For x large and negative, x + sqrt(x^2 + 1) is a difference of two nearly equal magnitudes, and the relative accuracy of the sum collapses; the logarithm then magnifies whatever survived. The remedy is oddness: compute on |x| and apply the sign at the end. This costs nothing and additionally makes ASINH(-x) = -ASINH(x) hold to the last bit. Any implementation of an odd function that does not do this has a symmetry defect that is trivially detectable.

2. Cancellation for small arguments. For small x, x + sqrt(x^2 + 1) is near 1, and ln of a value near 1 loses exactly the digits that carry the answer. The remedy is log1p, applied to a rearranged argument:

asinh x  =  log1p( x + x^2 / (1 + sqrt(1 + x^2)) )

Here nothing near 1 is ever formed and nothing is subtracted. Higham's treatment of log(1+x) is the standard statement of why this rearrangement is necessary rather than merely tidy. Below a threshold the series x - x^3/6 — or simply x itself — is correctly rounded and cheaper.

3. Overflow in the intermediate for large arguments. Described above. The remedy is a branch: once x is large enough that x^2 + 1 would round to x^2 anyway,

asinh x = ln(x) + ln(2)

computed without ever forming x^2. This extends the working range from the square root of the largest finite double all the way to the largest finite double itself — a hundred-odd decades recovered for the cost of one comparison.

fdlibm's s_asinh.c is the published implementation of exactly this three-branch structure, and it is what "a careful implementation" means for this function.

Why the naive form survives in the wild. It is one line, it is correct on the range people actually use, and its failure mode at the top of the range is an error rather than a wrong number; at small inputs it does give wrong numbers (FN-ASINH-001). That is a defensible engineering position and it is very likely how the behaviour on record came to exist. The Handbook records it as a departure from the mathematics without implying carelessness.

Rust code

Show the CalcFunc source of this function

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.

ASINH · 1 lines · calc-func/src/catalogue/math.rs on GitHub
6 asinh "ASINH" (1, 1) [V "number"] |s, a, sv| { out(s, k::asinh::asinh_kernel(num_with_subnormal(s, a, 0)?)) }
asinh_kernel · 28 lines · calc-func/src/ported/asinh.rs on GitHub
pub fn asinh_kernel(n: f64) -> Result<f64, WorksheetErrorCode> {
    // Excel computes `ln(x + sqrt(x² + 1))` and overflows when the `x²` intermediate
    // overflows f64, publishing `#NUM!` rather than the (finite, representable) analytic
    // value for such large |x|. Reproduce that boundary *bit-exactly* by forming the same
    // `x*x` intermediate Excel forms and rejecting when it is non-finite: this flips to
    // `#NUM!` at exactly the input Excel does (|x| > sqrt(f64::MAX) = 1.3407807929942596e154,
    // verified live against Excel 16.0 build 20026 around 0x5fefffffffffffff↔0x5ff0000000000000).
    // No guessed magic constant — identical f64 arithmetic yields Excel's exact threshold.
    if !(n * n).is_finite() {
        return Err(WorksheetErrorCode::Num);
    }
    // Inverse-problem identity, live Excel 16.0 b20228 Range.Value2:
    // ASINH(x) == SIGN(x)*LN(ABS(x)+SQRT(x*x+1)) on 23/23 signed rows.
    // The unsigned LN(x+SQRT(x*x+1)) misses negatives. Worksheet HYPOT
    // is not the graph. When x*x+1 overflows (x*x == f64::MAX), SQRT
    // cannot be formed; the published finite value is LN(2*|x|).
    let a = n.abs();
    // The recorded identity stores each operation from PC64, including SQRT.
    // Retaining the entire expression in the registers loses recorded matches.
    let sq = excel_x87_mul(a, a);
    let radicand = excel_x87_add(sq, 1.0);
    let inner = if !radicand.is_finite() {
        excel_x87_add(a, a)
    } else {
        excel_x87_add(a, excel_sqrt_staged(radicand))
    };
    Ok(n.signum() * crate::ported::excel_numeric::excel_log(inner))
}

Kernels shared with other functions

Argument and result plumbing

No implementation has been published with a Handbook test suite for this function.

Version differences

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 buildPlatform and CPUCaptured inputs
19929Windows, bitness not recorded, CPU not recorded41
20430Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics3,017
  • XC-ASINH-001: build 19929 versus build 20430; 2 same-input pairs, 0 differing answers. Compared axes: excel-build. Numeric answers were compared by their recorded binary64 bits; other answers by typed value.

Agreement on these compared inputs does not establish agreement on unmeasured inputs.

Recorded environments and comparison details.

Excel 16.0 build 20430

Windows 64-bit, AMD Ryzen 7 4800H

ASINH(-1.0126103340069186e-11) returned -1.0126122162949859e-11 (0xbda6447fffff840a). ASINH(-1.4901631254755754e-16) returned -2.2204460492503128e-16 (0xbcafffffffffffff). 5 further recorded controls are attached. Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • ASINH(-1.0126103340069186e-11) → -1.0126122162949859e-11
    0xbda6447fffff840a (cell-value2)
  • ASINH(-1.4901631254755754e-16) → -2.2204460492503128e-16
    0xbcafffffffffffff (cell-value2)
  • ASINH(1.0501151062119094e-16) → 0
    0x0000000000000000 (cell-value2)
  • ASINH(5e-324) → 0
    0x0000000000000000 (cell-value2)
  • ASINH(7.193439987815484e-08) → 7.19343998474134e-08
    0x3e734f4b58591206 (cell-value2)
  • ASINH(9.234293629925394e+153) → 355.2115905310072
    0x40763362acc0ad1b (cell-value2)
  • ASINH(2.3842260672008416e+154) → #NUM! (cell-value2)

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.

Excel 16.0 build 20430

Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics

3,017 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.

Alternatives

Relationships

  • SINH — the forward function. ASINH(SINH(t)) = t for every real t, which is the cleanest round trip in the family (no absolute value, no branch), and therefore the best oracle-free test on this page.
  • ATANH — the third inverse hyperbolic primary. asinh x = atanh(x/sqrt(x^2+1)).
  • ASIN — the circular namesake, and a completely different shape: bounded domain, bounded range, singular derivative at the endpoints. Sharing a name is the only thing they do.
  • LN and SQRT — the substrate, and the source of both the cancellation and the overflow.
  • LOG1P — which Excel does not expose as a worksheet function. Its absence is why a worksheet-level workaround for the small-argument hazard is awkward, and why a careful implementation of this surface must supply it internally. Excel's recorded answers follow a route without it (FN-ASINH-001).
  • Confused with: ASIN, by name; and with 1/SINH, which is CSCH.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents