{
  "category": "Engineering functions",
  "display_name": "BESSELJ",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.BESSELJ",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20228",
        "20527"
      ],
      "larger_numeric": 0,
      "last_bit": 1,
      "matched": 945,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 946,
      "unread": 0,
      "worst_ulp": 1
    },
    "detail": "Everything else matches (946 in the answer bank and 294 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: 1 of 1,240 recorded answers differ in the last bits, worst 1 ULP",
    "workbook_corpus": {
      "cells": 294,
      "matched": 294
    }
  },
  "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/engineering.rs#L261-L261",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel.rs#L180-L188",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel.rs#L189-L197",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel.rs#L305-L320",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel_rational.rs#L141-L179",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel_rational.rs#L231-L241",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel_rational.rs#L243-L245",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/bessel_rational.rs#L247-L250"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/engineering::radix_kind",
        "catalogue/engineering::bessel",
        "ported/bessel::abs",
        "ported/bessel::admit_phase",
        "ported/bessel::order",
        "ported/bessel::forward",
        "ported/bessel::odd_sign",
        "ported/bessel::finish",
        "ported/bessel_rational::polynomial",
        "ported/bessel_rational::polynomial_with",
        "ported/bessel_rational::j0",
        "ported/bessel_rational::j1",
        "ported/excel_numeric::sin_with",
        "ported/excel_numeric::cos_with",
        "ported/excel_numeric::excel_sin",
        "ported/excel_numeric::excel_cos",
        "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/soft87::ext_abs",
        "ported/excel_numeric/soft87::ext_chs"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/engineering.rs#L261-L261",
      "state": "close",
      "suite": null,
      "summary": "Close: 1 of 1,240 recorded answers differ in the last bits, worst 1 ULP"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.BESSELJ.json",
  "name": "BESSELJ",
  "notes": [
    {
      "basis": "One formula-literal control at sheet dc96l3_bessel, row 309, column 4 in the landed capture. Its environment is Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, en-ZA, workbook Compatibility Version 1. The raw and reopened binary64 encodings are both 3ff0000000c292b1; the saved numeric text is 1.00000000283141. The product test also pins these result bits.",
      "documentation": null,
      "evidence": [
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "sheet dc96l3_bessel, row 309, column 4",
          "note": "recorded formula and results with environment",
          "path": "crates/calc-func/tests/captures/catalogue/sections/dc96l3_bessel.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "spot_values_record_exact_controls_and_known_gaps",
          "note": "recorded answer pinned in the product test",
          "path": "crates/calc-func/src/ported/bessel.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "J0_NUM, J0_DEN and j0",
          "note": "current licensed published-method candidate; constant-term ratio at zero",
          "path": "crates/calc-func/src/ported/bessel_rational.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.BESSELJ"
      ],
      "inferred": "The current published small-J0 implementation evaluates its constant coefficients as 57568490574/57568490411 at x=0, which produces the recorded bits. That source-level explanation does not prove that Microsoft uses the same private program.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-BESSELJ-001",
      "open": [
        "The generic J/Y numerical bodies retain disagreements on other inputs; this control does not identify the full seed or recurrence program."
      ],
      "recorded_on": "2026-11-06",
      "repros": [
        {
          "call": "=BESSELJ(0,0)",
          "correct": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "how": "Exact identity J0(0)=1: in the defining series in NIST DLMF 10.2.2 (https://dlmf.nist.gov/10.2#E2), only the constant term remains at order zero and x=0.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000c292b1",
            "display": "1.00000000283141",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), AMD Ryzen 7 4800H, en-ZA, workbook Compatibility Version 1",
          "source": {
            "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
            "locator": "sheet dc96l3_bessel, row 309, column 4; formulas, observations, saved and reopened",
            "note": "one capture with raw, saved and reopened views; not three independent runs",
            "path": "crates/calc-func/tests/captures/catalogue/sections/dc96l3_bessel.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In the retained catalogue capture, BESSELJ(0,0) returns 1.00000000283141 (0x3ff0000000c292b1), while the mathematical Bessel function J0(0) is exactly 1. The raw answer, saved workbook cache and answer after reopening retain that same value. This is one captured input on the named Excel environment, not a general accuracy statement.",
      "status": "measured",
      "title": "BESSELJ at zero and order zero is slightly above one"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[BESSELI](FUNC.BESSELI.md) and [BESSELK](FUNC.BESSELK.md) are modified Bessel functions. [BESSELY](FUNC.BESSELY.md) supplies the other ordinary kind.\n\n\n\n\n",
    "how-to-implement": "\nValidate the numeric input and order before selecting a route. The current implementation uses licensed fixed rational seeds for J0 and J1, a forward recurrence when `abs(x)>n`, and a published adaptive backward program otherwise. For negative x, evaluate at its magnitude and apply the order's parity.\n\nFor forward order n, set `tox=2/abs(x)`, `previous=J0(abs(x))`, `current=J1(abs(x))`. For j from one through `n-1`, compute `next=(j*tox)*current-previous`, then advance the two states. The current J/Y outer recurrence uses ordinary binary64 operations with subnormal operands/results flushed to zero. K's stored-PC64 recurrence is a separate choice; do not transfer it automatically.\n\nWorked seed at zero: the small-J0 numerator's constant is `57568490574` and its denominator's is `57568490411`. Their binary64 quotient is `1.00000000283141`, the recorded result. For mathematical J0 the defining series instead has constant one and every higher term vanishes at zero.\n\nThe fixed seed/backward helpers credit SheetJS/bessel under Apache-2.0, with project changes and measured phase controls. The generic J/Y body remains a published-method candidate with residual differences. Its coefficient choices, phase grouping and boundaries do not amount to an identification of Microsoft's private code or a whole-domain equality claim.\n\n\n",
    "quirks": "\nNonnumeric arguments give `#VALUE!`. A negative order is rejected before truncation, so `n=-0.5` gives `#NUM!`; a nonnegative fractional order truncates toward zero. The current limit after truncation is 10,000,000.\n\nNegative x uses integer-order parity: an odd order changes sign and an even order does not. The order-zero approximation at zero is slightly high in the recorded capture. Do not insert a mathematical `J0(0)=1` shortcut into a compatibility implementation.\n\nThe current large-argument admission compares the stored phase with `2^27-1`. Its order-zero phase constant is `0.785398164`, order-one `2.356194491`; a forward recurrence needs both seed admissions. These are measured scope limits, separately from the remaining numerical-body discrepancies.\n\n\n",
    "sources": "\n- [Licensed seed and backward helpers](https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/src/ported/bessel_rational.rs).\n- [Microsoft: BESSELJ function](https://support.microsoft.com/en-us/excel/functions/besselj-function), opened 6 November 2026; syntax, documented argument rules and errors.\n- [DnaCalc implementation](https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/src/ported/bessel.rs); implementation steps and the limits identified in the text.\n- [FN-BESSELJ-001](../notes/FN-BESSELJ-001.json): zero-input capture and scope.\n- [NIST DLMF 10.2.2](https://dlmf.nist.gov/10.2#E2), opened 6 November 2026: defining series for the mathematical reference.\n\n",
    "try-it": "\nThe recorded `=BESSELJ(0,0)` returns `1.00000000283141` (`0x3ff0000000c292b1`). The mathematical value is exactly one; this example exposes the approximation in the seed rather than an input-rounding issue. FN-BESSELJ-001 retains the captured answer and its environment.\n\n`=BESSELJ(0,3)` returns zero under the current route. For a nonzero example, the order-two value at x=3 comes from the recurrence `J2(3)=(2/3)*J1(3)-J0(3)`, so both order-zero and order-one seeds contribute.\n\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| 20228 | Windows, 64-bit, CPU not recorded | 794 |\n\nThe record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.BESSELJ.json).\n\nA later catalogue capture on Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, en-ZA, workbook Compatibility Version 1 records BESSELJ(0,0)=1.00000000283141 (0x3ff0000000c292b1). The raw, saved and reopened views are from one capture. This is not a matched-input comparison with the earlier build.",
    "what-it-does": "\n`BESSELJ(x,n)` evaluates the order-n Bessel function of the first kind. It is a special function used in radial and oscillatory problems, rather than an elementary trigonometric function. The order is truncated to an integer.\n\n\n"
  },
  "signature": {
    "display": "BESSELJ(x, n)",
    "parameters": [
      {
        "description": null,
        "name": "x",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "n",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "category": "Engineering functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "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": "None",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Bessel function of the first kind, J_n(x)",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the Bessel function Jn(x)",
        "microsoft_url": "https://support.microsoft.com/en-us/office/besselj-function-839cb181-48de-408b-9d80-bd02982d94f7"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "BESSELJ"
        },
        {
          "locale": "bg-BG",
          "name": "BESSELJ"
        },
        {
          "locale": "cs-CZ",
          "name": "BESSELJ"
        },
        {
          "locale": "da-DK",
          "name": "BESSELJ"
        },
        {
          "locale": "de-DE",
          "name": "BESSELJ"
        },
        {
          "locale": "el-GR",
          "name": "BESSELJ"
        },
        {
          "locale": "en-AU",
          "name": "BESSELJ"
        },
        {
          "locale": "en-GB",
          "name": "BESSELJ"
        },
        {
          "locale": "en-US",
          "name": "BESSELJ"
        },
        {
          "locale": "es-ES",
          "name": "BESSELJ"
        },
        {
          "locale": "et-EE",
          "name": "BESSELJ"
        },
        {
          "locale": "fi-FI",
          "name": "BESSELJ"
        },
        {
          "locale": "fr-FR",
          "name": "BESSELJ*"
        },
        {
          "locale": "he-IL",
          "name": "BESSELJ"
        },
        {
          "locale": "hr-HR",
          "name": "BESSELJ"
        },
        {
          "locale": "hu-HU",
          "name": "BESSELJ"
        },
        {
          "locale": "id-ID",
          "name": "BESSELJ"
        },
        {
          "locale": "it-IT",
          "name": "BESSELJ"
        },
        {
          "locale": "ja-JP",
          "name": "BESSELJ"
        },
        {
          "locale": "ko-KR",
          "name": "BESSELJ"
        },
        {
          "locale": "lt-LT",
          "name": "BESSELJ"
        },
        {
          "locale": "lv-LV",
          "name": "BESSELJ"
        },
        {
          "locale": "nb-NO",
          "name": "BESSELJ"
        },
        {
          "locale": "nl-NL",
          "name": "BESSELJ"
        },
        {
          "locale": "pl-PL",
          "name": "BESSEL.J"
        },
        {
          "locale": "pt-BR",
          "name": "BESSELJ"
        },
        {
          "locale": "pt-PT",
          "name": "BESSELJ"
        },
        {
          "locale": "ro-RO",
          "name": "BESSELJ"
        },
        {
          "locale": "ru-RU",
          "name": "БЕССЕЛЬ.J"
        },
        {
          "locale": "sk-SK",
          "name": "BESSELJ"
        },
        {
          "locale": "sl-SI",
          "name": "BESSELJ"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "BESSELJ"
        },
        {
          "locale": "sv-SE",
          "name": "BESSELJ"
        },
        {
          "locale": "th-TH",
          "name": "BESSELJ"
        },
        {
          "locale": "tr-TR",
          "name": "BESSELJ işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "BESSELJ"
        },
        {
          "locale": "vi-VN",
          "name": "BESSELJ"
        },
        {
          "locale": "zh-CN",
          "name": "BESSELJ"
        },
        {
          "locale": "zh-HK",
          "name": "BESSELJ"
        },
        {
          "locale": "zh-TW",
          "name": "BESSELJ"
        }
      ],
      "signature": {
        "display": "BESSELJ(x, n)",
        "parameters": [
          {
            "description": null,
            "name": "x",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "n",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "BESSELJ",
      "version_marker": null,
      "xlcall": {
        "code": "425",
        "symbol": "xlfBesselj"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/besselj-function-839cb181-48de-408b-9d80-bd02982d94f7"
  },
  "try_it": {
    "formula": "=BESSELJ(0,0)"
  },
  "url": "https://handbook.dnacalc.com/functions/BESSELJ.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "794 captured inputs are indexed for this environment. Capture dates: 2026-08-09 to 2026-08-09. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20228",
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.BESSELJ.json"
      ]
    },
    {
      "behaviour": "A later catalogue capture on Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, en-ZA, workbook Compatibility Version 1 records BESSELJ(0,0)=1.00000000283141 (0x3ff0000000c292b1). The raw, saved and reopened views are from one capture. This is not a matched-input comparison with the earlier build.",
      "excel_build": "16.0.20527.20088",
      "platform": "Windows 64-bit, AMD Ryzen 7 4800H, en-ZA, workbook Compatibility Version 1",
      "sources": [
        "https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/tests/captures/catalogue/sections/dc96l3_bessel.capture.json"
      ]
    }
  ]
}