{
  "category": "Engineering functions",
  "display_name": "ERF",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.ERF",
  "implementation_state": {
    "answer_bank": null,
    "detail": "Everything else matches (4 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: 2 of 4 recorded answers differ in the last bits, worst 1 ULP",
    "workbook_corpus": {
      "cells": 4,
      "last_bit": 2,
      "matched": 2,
      "worst_ulp": 1
    }
  },
  "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/distributions.rs#L307-L312",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/special_dist_family.rs#L58-L60",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/special_dist_family.rs#L62-L70"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_x87_add",
        "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::add",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div",
        "ported/normal_dist_common::stored_horner",
        "ported/normal_dist_common::erf_approx",
        "ported/normal_dist_common::erfc_upper"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/distributions.rs#L307-L312",
      "state": "close",
      "suite": null,
      "summary": "Close: 2 of 4 recorded answers differ in the last bits, worst 1 ULP"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.ERF.json",
  "name": "ERF",
  "notes": [
    {
      "basis": "16 recorded DELTA and GESTEP formula readings, 8 readings each with errors and text held in cells, and the ERF companions on the same sheets. GESTEP gave the same pattern as DELTA in every pair.",
      "documentation": null,
      "evidence": [
        {
          "commit": "287c5b9a3bec81ea96f12ad485f18a0d4b729063",
          "locator": "delivered_fn4_scalar_logical_positions_and_error_order",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qa001 to qa008, qa013 to qa020, qa109 to qa116",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "8 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/DELTA.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "8 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/GESTEP.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.DELTA",
        "FUNC.ERF",
        "FUNC.GESTEP"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-DELTA-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=DELTA(TRUE,#REF!)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa007, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=DELTA(#REF!,TRUE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa008, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=GESTEP(TRUE,#REF!)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa019, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=GESTEP(#REF!,TRUE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa020, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ERF(TRUE,#REF!)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa115, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ERF(#REF!,TRUE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa116, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "DELTA(A1, A2)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": null,
                "display": "#N/A",
                "kind": "error"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": null,
                "display": "#REF!",
                "kind": "error"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DELTA-argument-order-7",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DELTA.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=DELTA(B1,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "TRUE",
                "kind": "logical"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa003, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=DELTA(B1,0)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "(empty cell)",
                "kind": "blank"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "sheet qa004, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "When both arguments of DELTA or GESTEP are bad, the error comes from the second one: DELTA(TRUE,#REF!) is #REF! and DELTA(#REF!,TRUE) is #VALUE!. With two errors, DELTA gives the second. ERF reads left to right: ERF(TRUE,#REF!) is #VALUE! and ERF(#REF!,TRUE) is #REF!. A logical is rejected in either position of these functions, whether typed or held in a cell: DELTA(TRUE,0) and DELTA(2,TRUE) are #VALUE!, and DELTA(B1,0) with TRUE in B1 is #VALUE!, while an empty B1 reads as 0 and gives 1.",
      "status": "measured",
      "title": "DELTA and GESTEP read their second argument first"
    },
    {
      "basis": "All 618,225 recorded ERF.PRECISE rows with |x| < 0.5 match; they were only scored, never used to read the coefficients, and ERFC and ERFC.PRECISE match every recorded row in that range. Two fresh sets of 60,000 random doubles below 0.5 (Excel build 20527) match 59,996 and 59,982; the second was asked after the constants were fixed, and 17 of its 18 misses are in [0.25, 0.5). With every step stored, 223 of 38,000 rows at 19 sites stay unexplained; the other store placements leave 568 to 1,244. 2,000 consecutive doubles below 0.5 match 1,988, and 2,000 from 0.5 up match 858, chance level, which places the cut.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: how the rational was read, the checks, the final constants",
          "path": "content/notes/evidence/2026-11-04/erf-EVIDENCE-round3.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "earlier round: the structure, the refutation of Cody, the edge bisection",
          "path": "content/notes/evidence/2026-11-04/erf-EVIDENCE-round2.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "first write-up; its Cody attribution is withdrawn",
          "path": "content/notes/evidence/2026-11-04/erf-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "36a7f3d7aa607bcea8b75bd65fb352beec657817",
          "locator": "erf_approx, ERF_N, ERF_D",
          "note": "the rational in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/normal_dist_common.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ERF",
        "FUNC.ERF.PRECISE",
        "FUNC.ERFC",
        "FUNC.ERFC.PRECISE",
        "FUNC.GAUSS"
      ],
      "inferred": "That the legacy ERF(x) shares this body is inferred: ERF.PRECISE, ERFC and ERFC.PRECISE rows were scored in full, and for ERF itself the record holds only nine non-zero single-argument inputs below 0.5 (build 19929), all equal to the rational.",
      "kind": "bit-matching-detail",
      "note_id": "FN-ERF.PRECISE-001",
      "open": [
        "The last bits of the coefficients of order 3 and above. Orders 0 and 1 are exact: one unit off in a linear term breaks 500 to 1,100 of 160,000 rows. Order 2 sits at the minimum of the same scan. Higher orders are good to the level that shows, about 0.15% of rows above 0.25.",
        "The source table. Hart's ERF tables remain unchecked.",
        "Which branch owns x = 0.5: there the rational and a correctly rounded erf give the same bits.",
        "Subnormal arguments: Excel reads a subnormal written to a cell back as 0, so they cannot be asked that way."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ERF.PRECISE(0.4524739583333333)",
          "correct": {
            "bits": "0x3fde939a879e86f3",
            "display": "0.4777590107351976",
            "how": "mpmath erf at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fde939a879e86f6",
            "display": "0.4777590107351978",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3fdcf55555555555",
                "display": "0.4524739583333333",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1219, key ERF.PRECISE|0x3fdcf55555555555",
            "note": null,
            "path": "cache/oracle/build-20131/ERF.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ERF.PRECISE(9.094947017729282e-13)",
          "correct": {
            "bits": "0x3d720dd750429b6d",
            "display": "1.0262548740643184e-12",
            "how": "mpmath erf at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3d720dd750429b6e",
            "display": "1.0262548740643186e-12",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3d70000000000000",
                "display": "9.094947017729282e-13",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 2115, key ERF.PRECISE|0x3d70000000000000",
            "note": null,
            "path": "cache/oracle/build-20131/ERF.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ERF.PRECISE(9.999999999999998e-11)",
          "correct": {
            "bits": "0x3ddf044332d6815f",
            "display": "1.1283791670955123e-10",
            "how": "mpmath erf at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ddf044332d68160",
            "display": "1.1283791670955125e-10",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3ddb7cdfd9d7bdb9",
                "display": "9.999999999999998e-11",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 209, key ERF.PRECISE|0x3ddb7cdfd9d7bdb9",
            "note": null,
            "path": "cache/oracle/build-20131/ERF.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, ERF.PRECISE for |x| < 0.5 is x*N(t)/D(t) with t = RN(x*x), p = RN(x*N), y = RN(p/D), and N and D Horner sums in t in which every product and every sum is RN. N has degree 4 and D degree 5, and the coefficients read off Excel's answers, order 0 upward, are N: 0x3ff1df5e70c7956b, 0x3fc201d8627a7d2c, 0x3fa6f289d165b303, 0x3f5d93a5813e372c, 0x3f2932767df264b2; D: 0x3fefada15778ece6, 0x3fdd191aca8d2499, 0x3fb79f85ba68803e, 0x3f856de5da86af12, 0x3f4609751b5b6488, 0x3ef4f20a473a5ab0. The rational stops at 0.5 itself. It equals erf to a flat 9E-17 up to 0.5, and its error climbs at once beyond, so 0.5 is its design interval and not Cody's 0.46875. No published table has been matched: Cody's 1969 rational is refuted by its linear terms, and Cephes has the same shape with different ratios. Evidence record EV-DIST-0026, which predates this note, attributes ERF.PRECISE and ERFC.PRECISE to the a < 1 branches of the NSWC GRATIO routine and says no coefficient table exists; below 0.5 this note replaces that attribution. Because every step rounds, answers need not be correctly rounded: of the 654 recorded rows of build 20131 in [0.25, 0.5), 400 differ from the correctly rounded erf, by up to 3 units, and small arguments can be 1 unit high, as below. ERFC and ERFC.PRECISE below 0.5 are 1 less this value, and GAUSS at tiny arguments takes half of it at its stored z/sqrt(2).",
      "status": "measured",
      "title": "Below 0.5, ERF is a stored (4, 5) rational from a table not yet identified"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[ERFC](FUNC.ERFC.md) computes the complementary tail directly. [NORM.S.DIST](FUNC.NORM.S.DIST.md) provides a standard-normal CDF with a different argument transformation.\n\n\n\n\n",
    "how-to-implement": "\nFor normal `abs(x)<0.5`, use `R(op)=RN53(RN64(op))`: round each operation to a 64-bit significand, then store to binary64. Decode the following hexadecimal strings as **binary64 bit patterns**, not integers converted to floating-point values.\n\n| Power | Numerator coefficient | Denominator coefficient |\n|---:|---|---|\n| 0 | `3ff1df5e70c7956b` | `3fefada15778ece6` |\n| 1 | `3fc201d8627a7d2c` | `3fdd191aca8d2499` |\n| 2 | `3fa6f289d165b303` | `3fb79f85ba68803e` |\n| 3 | `3f5d93a5813e372c` | `3f856de5da86af12` |\n| 4 | `3f2932767df264b2` | `3f4609751b5b6488` |\n| 5 | — | `3ef4f20a473a5ab0` |\n\n1. Store `t=R(x*x)`.\n2. Evaluate each polynomial by Horner, beginning with its highest-power coefficient. Every step is `v=R(R(v*t)+coefficient)`. Keep the multiplication store separate from the addition store; do not use FMA.\n3. Store `p=R(x*N)` and return `R(p/D)`.\n\nWorked `x=0.25`: `t=0.0625`; the staged coefficient evaluation gives `N=1.126001525484713`, `D=1.018724202200851`, `p=0.2815003813711783`, and result `0.276326390168237` (`0x3fd1af54e232d60a`). These are outputs of the stated reconstruction, with all input coefficients retained above.\n\nThe degrees and stores are supported by discriminating readings. The final bits of several higher-order coefficients remain open: the fixed c14 model matched 59,982 of a fresh 60,000-row holdout. Do not extrapolate this ratio above `abs(x)=0.5`. For larger magnitudes the current code uses the signed stored complement `copysign(R(1-upper_ERFC(abs(x))),x)`. At exactly plus or minus 0.5 it instead retains its runtime ERF fallback. The fixed ratio and the mathematical value agree in bits at the positive half point, so that single recorded answer does not identify which private branch owns it. Zero and nonnormal inputs also retain the fallback and their separate transfer/publication rules. The upper ERFC exponential stage is measured, but its remaining rational factor is a stand-in. No published Handbook suite establishes a whole-domain equality claim.\n\nFor the two-limit form the current kernel subtracts the two separately evaluated primitives in binary64. Nearly equal endpoints can lose relative accuracy; that wrapper is a separate obligation from the rational body.\n\n\n",
    "quirks": "\nNonnumeric arguments give `#VALUE!`. The PRECISE name does not imply correctly rounded results on every input. The measured below-half stage and the unresolved upper stage need separate treatment. Subnormal inputs transferred to worksheet cells can be read back as zero, so the input route is part of a useful reproduction.\n\n\nThe recorded two-argument ERF wrapper reads left to right and rejects logicals: `ERF(TRUE,#REF!)` returns `#VALUE!`, while `ERF(#REF!,TRUE)` returns `#REF!`. DELTA and GESTEP have a different recorded read order.\n\n\n",
    "sources": "\n- [Microsoft: ERF function](https://support.microsoft.com/en-us/excel/functions/erf-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/normal_dist_common.rs); implementation steps and the limits identified in the text.\n- [ERF research and holdout results](../notes/evidence/2026-11-04/erf-EVIDENCE-round3.md).\n\n",
    "try-it": "\n`=ERF(0.25)` is about `0.276326390168237`. `=ERF(0.1,0.25)` computes the integral over just that interval; reversing the two bounds negates it.\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| 19929 | Windows, bitness not recorded, CPU not recorded | 42 |\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.ERF.json).\n\nRetained controls from the indexed captures:\n\n| Build and recorded CPU | Captured call or arguments | Excel result |\n|---|---|---|\n| 19929, CPU not recorded | [`=ERF(0)`](https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz) | `0.0` (`0x0000000000000000`) |\n\nThese are earlier recorded answers, not new Excel runs or an additional cross-build comparison. The function JSON retains each source locator, exact argument bits where available, and input-route status. Call notation does not imply that captured binary64 values were entered as decimal formula literals.",
    "what-it-does": "\n`ERF(lower_limit, [upper_limit])` returns the normalised integral of `exp(-t*t)` between the limits. With one argument it integrates from zero to that argument; with two it subtracts the lower primitive from the upper.\n\n\n"
  },
  "signature": {
    "display": "ERF(lower_limit, [upper_limit])",
    "parameters": [
      {
        "description": null,
        "name": "lower_limit",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "upper_limit",
        "optional": true,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 1
      },
      "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": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Error function, integrated between two limits or from 0",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the error function",
        "microsoft_url": "https://support.microsoft.com/en-us/office/erf-function-c53c7e7b-5482-4b6c-883e-56df3c9af349"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "ERF"
        },
        {
          "locale": "bg-BG",
          "name": "ERF"
        },
        {
          "locale": "cs-CZ",
          "name": "ERF"
        },
        {
          "locale": "da-DK",
          "name": "FEJLFUNK"
        },
        {
          "locale": "de-DE",
          "name": "ERF"
        },
        {
          "locale": "el-GR",
          "name": "ERF"
        },
        {
          "locale": "en-AU",
          "name": "ERF"
        },
        {
          "locale": "en-GB",
          "name": "ERF"
        },
        {
          "locale": "en-US",
          "name": "ERF"
        },
        {
          "locale": "es-ES",
          "name": "FUN.ERROR"
        },
        {
          "locale": "et-EE",
          "name": "ERF"
        },
        {
          "locale": "fi-FI",
          "name": "VIRHEFUNKTIO"
        },
        {
          "locale": "fr-FR",
          "name": "ERF"
        },
        {
          "locale": "he-IL",
          "name": "ERF"
        },
        {
          "locale": "hr-HR",
          "name": "ERF"
        },
        {
          "locale": "hu-HU",
          "name": "HIBAF"
        },
        {
          "locale": "id-ID",
          "name": "ERF"
        },
        {
          "locale": "it-IT",
          "name": "ERF"
        },
        {
          "locale": "ja-JP",
          "name": "ERF"
        },
        {
          "locale": "ko-KR",
          "name": "ERF"
        },
        {
          "locale": "lt-LT",
          "name": "ERF"
        },
        {
          "locale": "lv-LV",
          "name": "ERF"
        },
        {
          "locale": "nb-NO",
          "name": "ERF"
        },
        {
          "locale": "nl-NL",
          "name": "FOUTFUNCTIE"
        },
        {
          "locale": "pl-PL",
          "name": "FUNKCJA.BŁ"
        },
        {
          "locale": "pt-BR",
          "name": "ERF"
        },
        {
          "locale": "pt-PT",
          "name": "FUNCERRO"
        },
        {
          "locale": "ro-RO",
          "name": "ERF"
        },
        {
          "locale": "ru-RU",
          "name": "ФОШ"
        },
        {
          "locale": "sk-SK",
          "name": "ERF"
        },
        {
          "locale": "sl-SI",
          "name": "ERF"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "ERF"
        },
        {
          "locale": "sv-SE",
          "name": "FELF"
        },
        {
          "locale": "th-TH",
          "name": "ERF"
        },
        {
          "locale": "tr-TR",
          "name": "HATAİŞLEV işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "ERF"
        },
        {
          "locale": "vi-VN",
          "name": "ERF"
        },
        {
          "locale": "zh-CN",
          "name": "ERF"
        },
        {
          "locale": "zh-HK",
          "name": "ERF"
        },
        {
          "locale": "zh-TW",
          "name": "ERF"
        }
      ],
      "signature": {
        "display": "ERF(lower_limit, [upper_limit])",
        "parameters": [
          {
            "description": null,
            "name": "lower_limit",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "upper_limit",
            "optional": true,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "ERF",
      "version_marker": null,
      "xlcall": {
        "code": "423",
        "symbol": "xlfErf"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/erf-function-c53c7e7b-5482-4b6c-883e-56df3c9af349"
  },
  "try_it": {
    "formula": "=ERF(0.25)"
  },
  "url": "https://handbook.dnacalc.com/functions/ERF.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "=ERF(TRUE,#REF!) returned #VALUE!. =ERF(#REF!,TRUE) returned #REF!. Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0.20527.20088",
      "observations": [
        {
          "call": "=ERF(TRUE,#REF!)",
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        },
        {
          "call": "=ERF(#REF!,TRUE)",
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA"
        }
      ],
      "platform": "Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-DELTA-001.json"
      ]
    },
    {
      "behaviour": "42 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build. Retained control =ERF(0) returned 0.0 (0x0000000000000000). The selected archive row does not record its input plumbing; no input route is inferred.",
      "excel_build": "16.0 build 19929",
      "observations": [
        {
          "call": "=ERF(0)",
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0.0",
            "kind": "number"
          },
          "input_route": "not-recorded",
          "inputs": [],
          "recorded_in": "Excel 16.0 build 19929, Windows, bitness not recorded, CPU not recorded.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "BSE-000000907",
            "path": "runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "platform": "Windows, bitness not recorded, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.ERF.json",
        "https://github.com/DnaCalc/CalcFunc-Evidence/blob/4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2/runs/W097-R-B-validation-cellref-module/comparisons/excel_sample_comparisons.jsonl.gz"
      ]
    }
  ]
}