{
  "category": "Math and trigonometry functions",
  "display_name": "SINH",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.SINH",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 130,
      "matched": 33420,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 33550,
      "unread": 0,
      "worst_ulp": 1
    },
    "detail": "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.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "close",
    "state_label": "Close: last-bit deviations remain",
    "summary": "Close: 130 of 33,553 recorded answers differ in the last bits, worst 1 ULP",
    "workbook_corpus": {
      "cells": 3,
      "matched": 3
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/math.rs#L75-L77"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/math::raw",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_expm1_internal",
        "ported/excel_numeric::expm1_internal_graph",
        "ported/excel_numeric::excel_x87_sub",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric::excel_x87_div",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div",
        "ported/excel_numeric/x87_chains::pow2_positive",
        "ported/excel_numeric/x87_chains::pow2",
        "ported/excel_numeric/x87_chains::exp_ext",
        "ported/excel_numeric/x87_chains::exp_with",
        "ported/excel_numeric/x87_chains::excel_exp",
        "ported/excel_numeric/x87_chains::log_with",
        "ported/excel_numeric/x87_chains::excel_log",
        "ported/sinh::sinh_kernel"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/math.rs#L75-L77",
      "state": "close",
      "suite": null,
      "summary": "Close: 130 of 33,553 recorded answers differ in the last bits, worst 1 ULP"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.SINH.json",
  "name": "SINH",
  "notes": [],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **`COSH`** — the even primary; `COSH` and `SINH` differ by the sign in the numerator, and\n  `COSH` never approaches zero, which makes it the numerically easy one.\n- **`TANH`** — `SINH/COSH`, bounded in `(-1, 1)`. Computing `TANH` as that quotient is a\n  mistake for large arguments (see the `TANH` page).\n- **`ASINH`** — the inverse, defined on all of `R` as `ln(x + sqrt(x^2 + 1))`. That closed form\n  is where the interesting cancellation in this family lives; see the `ASINH` page.\n- **`SIN`** — the circular sibling, via `sinh x = -i sin(ix)`. Bounded versus unbounded is the\n  practical difference and it is the whole reason their edge cases have nothing in common.\n- **`EXP`** — the substrate of every reasonable implementation, and a co-subject of\n  `EV-MATH-0008`.\n- **Confused with**: `SIN`, by name similarity, and by readers who assume a degrees convention\n  applies.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\n`SINH` has two hazards, at opposite ends of its domain, and one identity that fixes each.\n\n**Near zero: cancellation.** The naive formula `(exp(x) - exp(-x))/2` subtracts two numbers that\nboth approach `1` as `x -> 0`. The difference is `2x` to leading order, so the subtraction\ndiscards approximately as many significant bits as `|x|` has leading zeros in its exponent —\ntotal loss for small `x`. Relative accuracy is destroyed exactly where the function is smoothest.\n\nThe two standard remedies:\n\n1. **Use `expm1`.** With `u = expm1(x)` (that is, `e^x - 1` computed without the cancellation),\n   `sinh x = (u + u/(1+u)) / 2`. This form is the one Cody & Waite and the modern libms use in\n   the middle band, because `expm1` is itself constructed to be accurate near zero.\n2. **Use the series** for very small `|x|`: `sinh x = x (1 + x^2/6 + x^4/120 + ...)`, truncated\n   as soon as the next term falls below the rounding of the leading `x`.\n\nAny implementation that uses the closed exponential form all the way down to zero has a\nrelative-error profile that grows without bound as the argument shrinks. This is a\nstraightforwardly detectable defect and it is worth probing for.\n\n**Near the top: overflow in the intermediate.** The naive form computes `e^x` first, so it\noverflows one halving *earlier* than the true result does — there is a band of arguments whose\n`sinh` is representable but whose `e^x` is not. The standard remedy is the **scaled\nexponential**: compute `e^(x - k*ln2) ` and apply the power of two afterwards by exponent\nmanipulation, so the intermediate never leaves range. `fdlibm`'s `sinh` and Cody & Waite both\ndo a version of this. Whether an implementation recovers that band is a clean, single-probe\ntest.\n\n**Symmetry.** `sinh` is odd, so an implementation should compute on `|x|` and re-apply the sign,\nwhich halves the branch count and guarantees exact antisymmetry. An implementation that does not\ncan return values for `x` and `-x` that are not exact negatives of each other — a small defect,\nbut one that breaks any downstream code relying on the parity identity.\n\n**A note on what \"correct\" means here.** For arguments where the result overflows, an\nimplementation has three defensible outputs: an infinity, an overflow error, or a saturated\nfinite value. `EV-MATH-0008` records that Excel's convention is the error. That is a\nrepresentation policy, not a numerical claim, and the Handbook keeps the two apart.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number`.\n\nThe characteristic edge is **overflow**. Because `sinh x ~ e^x/2`, the result exceeds the\nbinary64 range at a moderate argument — somewhere just past the point where `e^x` itself\noverflows, shifted by the halving. Beyond that point the mathematical value exists and is\nfinite; it is only the representation that fails.\n\nSmall arguments round-trip: below the point where `x^3/6` is negligible against `x`, the\ncorrectly rounded `sinh x` is `x`, so subnormals pass through unchanged.\n\n\n",
    "sources": "\n- Microsoft, \"SINH function\" —\n  <https://support.microsoft.com/en-us/office/sinh-function-1e4e8b9f-2b65-43fc-ab8a-0a37f4081fa7>\n  (signature, \"any real number\", and the statement that a formula is given; the formula appears\n  as an image and no error conditions are listed).\n- Abramowitz & Stegun, *Handbook of Mathematical Functions*, chapter 4 section 4.5 — hyperbolic\n  functions: definitions, series, identities, and the relation to the circular functions.\n- Cody & Waite, *Software Manual for the Elementary Functions* — the small-argument and\n  scaled-exponential branches.\n- `fdlibm` `sinh`, `expm1`; Boost.Math hyperbolic documentation — the reference implementations\n  of both remedies.\n- Handbook evidence record `EV-MATH-0008` (subjects include `FUNC.SINH`) — the non-finite\n  publication convention, with witnesses and, in its own words, no row count.\n- Handbook projections `data/functions/FUNC.SINH.json` (arity, classification,\n  `real_result_policy` with `non_finite=num`) and `data/presence/FUNC.SINH.json`.\n- Handbook [Coercion and lifting](../model/02-coercion-and-lifting.md).\n\n",
    "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.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 19929 | Windows, bitness not recorded, CPU not recorded | 41 |\n| 20430 | Windows, 64-bit, CPU not recorded | 33,550 |\n\n- XC-SINH-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.\n\nAgreement on these compared inputs does not establish agreement on unmeasured inputs.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.SINH.json).",
    "what-it-does": "\n`SINH(number)` is the hyperbolic sine:\n\n    sinh x  =  (e^x - e^(-x)) / 2  =  x + x^3/3! + x^5/5! + x^7/7! + ...\n\n- **Domain**: all real numbers. `sinh` is entire; no poles, no branch cuts.\n- **Range**: all real numbers. Unlike its circular sibling, `sinh` is unbounded and strictly\n  increasing, hence a bijection from `R` onto `R` — which is why `ASINH` is defined everywhere\n  with no branch selection.\n- **Parity**: odd. `sinh(-x) = -sinh(x)`.\n- **Not periodic** over the reals (it has period `2*pi*i` in the complex plane, which is the\n  same statement as `sin(ix) = i sinh(x)`).\n- **Limiting behaviour**: `sinh x / x -> 1` as `x -> 0`, with leading correction `x^3/6`. As\n  `x -> +infinity`, `sinh x ~ e^x / 2`; the term `e^(-x)/2` becomes negligible well before it\n  underflows.\n- **Fundamental identity**: `cosh^2 x - sinh^2 x = 1` — the hyperbola, in the same role the\n  Pythagorean identity plays for the circle. Addition formula:\n  `sinh(x + y) = sinh x cosh y + cosh x sinh y`.\n\nAbramowitz & Stegun treat the hyperbolic functions in chapter 4 section 4.5; the relations\n`sinh x = -i sin(ix)` and `sin x = -i sinh(ix)` are the bridge to section 4.3.\n\nMicrosoft's page gives the signature, describes the argument as \"any real number\", and states\nthat the formula for the hyperbolic sine is the one shown — the formula itself appears on that\npage only as an image, so it is not quotable from the article text. The definition above is the\nstandard one and is stated here from the mathematical literature, not from the article.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `number` | Any real number. Required. | — |\n\nThere are no units here. `SINH` takes a number, not an angle, and the `RADIANS` apparatus that\nattaches to `SIN` is meaningless for it. That is the position most often misunderstood: readers\narriving from `SIN` sometimes convert degrees first, which is simply wrong.\n\n\n"
  },
  "signature": {
    "display": "SINH(number)",
    "parameters": [
      {
        "description": null,
        "name": "number",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 1,
        "min": 1
      },
      "category": "Math and trigonometry functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "UnaryNumericScalarOrArrayElementwise",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "NumToNum",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Hyperbolic sine",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the hyperbolic sine of a number",
        "microsoft_url": "https://support.microsoft.com/en-us/office/sinh-function-1e4e8b9f-2b65-43fc-ab8a-0a37f4081fa7"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "SINH"
        },
        {
          "locale": "bg-BG",
          "name": "SINH"
        },
        {
          "locale": "cs-CZ",
          "name": "SINH"
        },
        {
          "locale": "da-DK",
          "name": "SINH"
        },
        {
          "locale": "de-DE",
          "name": "SINH"
        },
        {
          "locale": "el-GR",
          "name": "SINH"
        },
        {
          "locale": "en-AU",
          "name": "SINH"
        },
        {
          "locale": "en-GB",
          "name": "SINH"
        },
        {
          "locale": "en-US",
          "name": "SINH"
        },
        {
          "locale": "es-ES",
          "name": "SENOH"
        },
        {
          "locale": "et-EE",
          "name": "SINH"
        },
        {
          "locale": "fi-FI",
          "name": "SINH"
        },
        {
          "locale": "fr-FR",
          "name": "SINH*"
        },
        {
          "locale": "he-IL",
          "name": "SINH"
        },
        {
          "locale": "hr-HR",
          "name": "SINH"
        },
        {
          "locale": "hu-HU",
          "name": "SINH"
        },
        {
          "locale": "id-ID",
          "name": "SINH"
        },
        {
          "locale": "it-IT",
          "name": "SINH"
        },
        {
          "locale": "ja-JP",
          "name": "SINH"
        },
        {
          "locale": "ko-KR",
          "name": "SINH"
        },
        {
          "locale": "lt-LT",
          "name": "SINH"
        },
        {
          "locale": "lv-LV",
          "name": "SINH"
        },
        {
          "locale": "nb-NO",
          "name": "SINH"
        },
        {
          "locale": "nl-NL",
          "name": "SINH"
        },
        {
          "locale": "pl-PL",
          "name": "SINH"
        },
        {
          "locale": "pt-BR",
          "name": "SINH"
        },
        {
          "locale": "pt-PT",
          "name": "SENH"
        },
        {
          "locale": "ro-RO",
          "name": "SINH"
        },
        {
          "locale": "ru-RU",
          "name": "SINH"
        },
        {
          "locale": "sk-SK",
          "name": "SINH"
        },
        {
          "locale": "sl-SI",
          "name": "SINH"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "SINH"
        },
        {
          "locale": "sv-SE",
          "name": "SINH"
        },
        {
          "locale": "th-TH",
          "name": "SINH"
        },
        {
          "locale": "tr-TR",
          "name": "SİNH işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "SINH"
        },
        {
          "locale": "vi-VN",
          "name": "SINH"
        },
        {
          "locale": "zh-CN",
          "name": "SINH"
        },
        {
          "locale": "zh-HK",
          "name": "SINH"
        },
        {
          "locale": "zh-TW",
          "name": "SINH"
        }
      ],
      "signature": {
        "display": "SINH(number)",
        "parameters": [
          {
            "description": null,
            "name": "number",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "SINH",
      "version_marker": null,
      "xlcall": {
        "code": "229",
        "symbol": "xlfSinh"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/sinh-function-1e4e8b9f-2b65-43fc-ab8a-0a37f4081fa7"
  },
  "try_it": {
    "formula": "=SINH(1)"
  },
  "url": "https://handbook.dnacalc.com/functions/SINH.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "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_build": "16.0 build 19929",
      "platform": "Windows, bitness not recorded, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.SINH.json"
      ]
    },
    {
      "behaviour": "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.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.SINH.json"
      ]
    }
  ]
}