{
  "category": "Math and trigonometry functions",
  "display_name": "ASIN",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.ASIN",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 21610,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 21610,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 21,610 in the answer bank and 3 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 21,613 recorded answers",
    "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#L48-L48"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/math::unary",
        "ported/asin::asin_kernel",
        "ported/excel_numeric::atan_with",
        "ported/excel_numeric::atan_reduced_with",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_x87_sub",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric::excel_x87_div",
        "ported/excel_numeric::excel_atan_reduced",
        "ported/excel_numeric::excel_sqrt_staged",
        "ported/excel_numeric/soft87::pack_raw",
        "ported/excel_numeric/soft87::zero",
        "ported/excel_numeric/soft87::inf",
        "ported/excel_numeric/soft87::pack",
        "ported/excel_numeric/soft87::ext_pi",
        "ported/excel_numeric/soft87::ext_one",
        "ported/excel_numeric/x87::atan",
        "ported/excel_numeric/x87::atan_reduced",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/math.rs#L48-L48",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 21,613 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.ASIN.json",
  "name": "ASIN",
  "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- **`ACOS`** — the complementary partner, `ASIN(x) + ACOS(x) = PI()/2`. Same domain, mirrored\n  range, opposite monotonicity. The pair is not interchangeable by a sign flip.\n- **`ATAN`** — the unrestricted-domain member of the trio. `ASIN(x) = ATAN(x/SQRT(1-x^2))` inside\n  the open interval, and that identity is the usual way `ASIN` gets implemented on top of `ATAN`\n  when only one of the two is available.\n- **`ATAN2`** — `ASIN(x) = ATAN2(SQRT(1-x^2), x)` in Excel's `x`-first order, and this is the form\n  that behaves at the endpoints where the plain `ATAN` identity divides by something approaching\n  zero.\n- **`SIN`** — the forward function. `SIN(ASIN(x)) = x` to rounding across the domain;\n  `ASIN(SIN(t))` folds `t` into `[-pi/2, pi/2]`.\n- **`ASINH`** — the hyperbolic namesake, defined on *all* reals. Where `ASIN` is bounded in both\n  domain and range, `ASINH` is bounded in neither; they share a name and nothing else.\n- **`DEGREES`** — the usual consumer.\n- **Confused with**: `1/SIN(x)`, which is `CSC`; and with `ACSC`, which Excel does not have.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\n`ASIN`'s error behaviour is the mirror of `ACOS`'s, and the mirror is the point: they are hard in\nopposite places, which is why neither can be built naively on the other.\n\n**Where `ASIN` is easy.** Near zero the function is essentially the identity, and any decent\napproximation gets full relative accuracy. Near the endpoints the *value* is near `±pi/2`, which is\ncomfortably far from zero, so the relative accuracy of the answer is not destroyed by the\nsquare-root singularity — the singularity is in the derivative, not in the value. This is exactly\nwhere `ACOS` is hard, because there the answer *is* near zero.\n\n**Where `ASIN` is hard.** The absolute accuracy near the endpoints still depends on computing\n`sqrt(1 - x^2)` well, and that is a subtraction of nearly equal quantities:\n\n- Do **not** compute `1 - x*x`. The product rounds first, and near `|x| = 1` that rounding is a\n  full ulp of `1`, which is much larger than the quantity being kept.\n- Do compute `(1 - x)(1 + x)`. Both factors are exact for doubles near the endpoints (Sterbenz for\n  the first, exactness of the sum for the second), and the product loses only its own final\n  rounding.\n\n**The standard branch structure**, as in Cody & Waite and `fdlibm`'s `e_asin.c`:\n\n1. For `|x| <= 1/2`, evaluate a minimax rational approximation to `asin` directly. The argument is\n   comfortably away from the singularity and the polynomial does all the work.\n2. For `1/2 < |x| <= 1`, reduce with the half-angle identity\n   `asin(x) = pi/2 - 2*asin(sqrt((1-x)/2))`. The inner argument is at most `1/2`, so branch 1\n   evaluates it; the outer subtraction is safe because both terms are of order one and the answer\n   is of order one.\n3. Restore the sign at the end. Never branch on sign inside the kernel.\n\nNote the asymmetry with `ACOS`: `ASIN` can afford the `pi/2 - ...` subtraction at the endpoints and\n`ACOS` cannot, because `ASIN`'s answer there is large and `ACOS`'s is small. Two functions, one\nidentity, opposite verdicts. This is the single most useful thing to understand about the pair.\n\n**Intrinsic information loss.** The same caution as on the `ACOS` page applies from the other side:\nif `x` arrived as the result of a computation, the accuracy of `asin(x)` near the endpoints is\nlimited by how accurately `x` itself represents the intended sine, and the derivative blows up\nthere. No implementation can recover information the argument does not carry. Numerical geometry\ncode that needs a small angle accurately should get it from `ATAN2` of a cross product, not from\n`ASIN` of a ratio.\n\n**Self-tests without an oracle.** `ASIN(x) + ASIN(-x)` must be exactly zero if the sign is handled\nby symmetry. `ASIN(x) + ACOS(x) - PI()/2` across the domain exposes the branch split of both\nfunctions at once. `SIN(ASIN(x)) - x` is a cheap round trip whose residual profile shows where the\nsquare root is being computed badly.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number` — an angle in radians in `[-pi/2, pi/2]`.\n\n- **The endpoints** `-1` and `1` are in the domain and return `-pi/2` and `pi/2`. Closed interval;\n  an implementation testing `|x| < 1` gets both wrong, and they are the two arguments users pass\n  most often.\n- **Just outside the endpoints** — one ulp beyond — is a domain failure. As with `ACOS`, this\n  matters because the natural producer of an `ASIN` argument is a ratio that ought to be at most\n  one and, after rounding, sometimes is not. Clamp before calling.\n- **Zero** returns zero, and the sign of zero should survive an odd implementation.\n- **Subnormals** pass through unchanged: `asin(x) = x` to within rounding for arguments that small.\n- **Large magnitudes**, including anything a text conversion is likely to produce, are domain\n  failures.\n- **Arrays** lift elementwise, with element-local errors on out-of-domain elements.\n\n",
    "sources": "- Microsoft Learn, \"WorksheetFunction.Asin method (Excel)\" —\n  <https://learn.microsoft.com/en-us/office/vba/api/excel.worksheetfunction.asin> (retrieved:\n  description, the `-1` to `1` constraint, the `-pi/2` to `pi/2` range, and the degrees remark).\n- Abramowitz & Stegun, *Handbook of Mathematical Functions*, chapter 4 section 4.4 — inverse\n  circular functions: ranges, series and identities.\n- Cody & Waite, *Software Manual for the Elementary Functions*, chapter on `ASIN`/`ACOS` — the\n  `|x| = 1/2` split and the square-root reduction.\n- `fdlibm` `e_asin.c` — the published reference implementation.\n- Handbook projections `data/functions/FUNC.ASIN.json` (arity, lift profile, `real_result_policy`\n  with `arg_domain_guard=none;non_finite=allow`) and `data/presence/FUNC.ASIN.json` (implementing\n  module with declared artefacts present; appearance in the upstream coercion scenario manifest; no\n  discrepancy, math-deviation or defect entries).\n- Handbook [Coercion and lifting](../model/02-coercion-and-lifting.md) — the array-lift baseline,\n  which uses `ASIN`'s domain error as its worked example of element-local failure.\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 | 18 |\n| 20430 | Windows, 64-bit, CPU not recorded | 21,610 |\n\n- XC-ASIN-001: build 19929 versus build 20430; 5 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.ASIN.json).",
    "what-it-does": "\n`ASIN(number)` is the principal inverse sine: the angle in radians whose sine is *number*.\n\n    asin: [-1, 1] -> [-pi/2, pi/2],    sin(asin x) = x\n\n- **Domain**: the closed interval `[-1, 1]`. Outside it no real angle has that sine.\n- **Range**: `[-pi/2, pi/2]`, the principal branch. Microsoft's Learn reference states this range\n  explicitly.\n- **Parity**: odd. `asin(-x) = -asin(x)`, exactly. An implementation should compute on `|x|` and\n  restore the sign, which makes the identity hold to the last bit for free.\n- **Monotonicity**: strictly increasing, from `-pi/2` at `x = -1` through `0` at the origin to\n  `pi/2` at `x = 1`.\n- **Derivative**: `d/dx asin x = 1 / sqrt(1 - x^2)` — finite in the interior, infinite at both\n  endpoints. Vertical tangents at `x = ±1`.\n- **Series about zero**:\n  `asin x = x + x^3/6 + 3x^5/40 + 15x^7/336 + ...`, converging on `|x| < 1` but slowly near the\n  endpoints. For small `x`, `asin x -> x` with leading correction `x^3/6`, so subnormal arguments\n  pass through unchanged.\n- **Endpoint behaviour**: with `x = 1 - t`, `asin(x) = pi/2 - sqrt(2t)(1 + t/12 + ...)`. The\n  square-root approach to the endpoint is the same phenomenon as in `ACOS`, but here it appears as\n  a correction to a value near `pi/2` rather than as the value itself — which changes everything\n  about the numerics.\n- **Complementary identity**: `asin(x) + acos(x) = pi/2` exactly.\n- **Relation to arctangent**: `asin(x) = atan(x / sqrt(1 - x^2))` on the open interval, and\n  `asin(x) = atan2(x, sqrt(1-x^2))` in Excel's `x`-first order. The `atan2` form is the one that\n  survives the endpoints.\n- **Complex continuation**: branch cuts along `(-infinity, -1]` and `[1, +infinity)`, the same\n  cuts as `acos` — the real domain is exactly their complement on the real axis.\n\nAbramowitz & Stegun cover the inverse circular functions in chapter 4 section 4.4.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `number` | The sine of the angle you want. Required. | — |\n\nMicrosoft's Learn reference describes it as \"the sine of the angle that you want; must be from -1\nto 1\".\n\nThe misunderstood point is the unit of the result: radians. The Learn reference gives the standard\nremedy — multiply by 180/PI(), or use `DEGREES`.\n\n\n"
  },
  "signature": {
    "display": "ASIN(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": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Angle in radians, from -pi/2 to pi/2, whose sine is the given number",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the arcsine of a number",
        "microsoft_url": "https://support.microsoft.com/en-us/office/asin-function-81fb95e5-6d6f-48c4-bc45-58f955c6d347"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "ASIN"
        },
        {
          "locale": "bg-BG",
          "name": "ASIN"
        },
        {
          "locale": "cs-CZ",
          "name": "ASIN"
        },
        {
          "locale": "da-DK",
          "name": "ARCSIN"
        },
        {
          "locale": "de-DE",
          "name": "ARCSIN"
        },
        {
          "locale": "el-GR",
          "name": "ASIN"
        },
        {
          "locale": "en-AU",
          "name": "ASIN"
        },
        {
          "locale": "en-GB",
          "name": "ASIN"
        },
        {
          "locale": "en-US",
          "name": "ASIN"
        },
        {
          "locale": "es-ES",
          "name": "ASENO"
        },
        {
          "locale": "et-EE",
          "name": "ASIN"
        },
        {
          "locale": "fi-FI",
          "name": "ASIN"
        },
        {
          "locale": "fr-FR",
          "name": "ASIN"
        },
        {
          "locale": "he-IL",
          "name": "ASIN"
        },
        {
          "locale": "hr-HR",
          "name": "ASIN"
        },
        {
          "locale": "hu-HU",
          "name": "ARCSIN"
        },
        {
          "locale": "id-ID",
          "name": "ASIN"
        },
        {
          "locale": "it-IT",
          "name": "ARCSEN"
        },
        {
          "locale": "ja-JP",
          "name": "ASIN"
        },
        {
          "locale": "ko-KR",
          "name": "ASIN"
        },
        {
          "locale": "lt-LT",
          "name": "ASIN"
        },
        {
          "locale": "lv-LV",
          "name": "ASIN"
        },
        {
          "locale": "nb-NO",
          "name": "ASIN"
        },
        {
          "locale": "nl-NL",
          "name": "BOOGSIN"
        },
        {
          "locale": "pl-PL",
          "name": "ASIN"
        },
        {
          "locale": "pt-BR",
          "name": "ASEN"
        },
        {
          "locale": "pt-PT",
          "name": "ASEN"
        },
        {
          "locale": "ro-RO",
          "name": "ASIN"
        },
        {
          "locale": "ru-RU",
          "name": "ASIN"
        },
        {
          "locale": "sk-SK",
          "name": "ASIN"
        },
        {
          "locale": "sl-SI",
          "name": "ASIN"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "ASIN"
        },
        {
          "locale": "sv-SE",
          "name": "ASIN"
        },
        {
          "locale": "th-TH",
          "name": "ASIN"
        },
        {
          "locale": "tr-TR",
          "name": "ASİN"
        },
        {
          "locale": "uk-UA",
          "name": "ASIN"
        },
        {
          "locale": "vi-VN",
          "name": "ASIN"
        },
        {
          "locale": "zh-CN",
          "name": "ASIN"
        },
        {
          "locale": "zh-HK",
          "name": "ASIN"
        },
        {
          "locale": "zh-TW",
          "name": "ASIN"
        }
      ],
      "signature": {
        "display": "ASIN(number)",
        "parameters": [
          {
            "description": null,
            "name": "number",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "ASIN",
      "version_marker": null,
      "xlcall": {
        "code": "98",
        "symbol": "xlfAsin"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/asin-function-81fb95e5-6d6f-48c4-bc45-58f955c6d347"
  },
  "try_it": {
    "formula": "=ASIN(1)"
  },
  "url": "https://handbook.dnacalc.com/functions/ASIN.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "18 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.ASIN.json"
      ]
    },
    {
      "behaviour": "21,610 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.ASIN.json"
      ]
    }
  ]
}