{
  "note_count": 71,
  "notes": [
    {
      "basis": "About 120 recorded zero-mantissa cases through ABS, and 72 through VALUE. All 72 VALUE readings fit a limit of -308 to 308 on the exponent as counted here.",
      "documentation": null,
      "evidence": [
        {
          "commit": "344c1667872a7d62669ca3044decb06c92b1e6f6",
          "locator": "recorded_zero_percentage_exponents_are_validated",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qt097 to qt168",
          "note": "72 recorded VALUE readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ABS",
        "FUNC.VALUE"
      ],
      "inferred": "The exponent formula is inferred, though it fits every reading; that functions other than ABS and VALUE share this conversion is inferred.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ABS-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=ABS(\"0e-309\")",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "The text denotes zero: a zero mantissa is 0 at any exponent.",
            "kind": "number"
          },
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111textbounds-00008-abs-boundary-2-0",
            "note": null,
            "path": "runs/w111-numeric-text-percent-bounds-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=ABS(\"0e-308\")",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111textbounds-00012-abs-boundary-3-0",
            "note": null,
            "path": "runs/w111-numeric-text-percent-bounds-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=ABS(\"0e-307%\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111textbounds-00017-abs-boundary-4-1",
            "note": null,
            "path": "runs/w111-numeric-text-percent-bounds-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=ABS(\"0e309\")",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "The text denotes zero: a zero mantissa is 0 at any exponent.",
            "kind": "number"
          },
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111textbounds-00028-abs-boundary-7-0",
            "note": null,
            "path": "runs/w111-numeric-text-percent-bounds-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=ABS(\"0.0e309\")",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111textbounds-00108-abs-boundary-27-0",
            "note": null,
            "path": "runs/w111-numeric-text-percent-bounds-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=VALUE(\"0e-307\")",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "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 qt099, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0e-307%\")",
          "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 qt100, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0e309\")",
          "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 qt107, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0.0e309\")",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "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 qt143, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0e309%\")",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "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 qt108, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0e311%\")",
          "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 qt112, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Converting text to a number, measured through ABS and VALUE, rejects a zero mantissa with an out-of-range exponent: ABS(\"0e-309\") is #VALUE! though the text denotes 0, and ABS(\"0e-308\") is 0. The exponent counts as written, less the fraction digits, less 2 for a percent sign, so ABS(\"0.0e309\") is 0, ABS(\"0e309\") is #VALUE!, and ABS(\"0e-307%\") is #VALUE!.",
      "status": "measured",
      "title": "Text to number checks the exponent range even when the mantissa is zero"
    },
    {
      "basis": "All 4,534 rows of two recorded sets, 3,017 and 1,517 rows, from Excel build 20430. The route was recomputed independently in exact rational arithmetic with a correctly rounded LN, and matched every row. The stored steps matter on 5 of the rows (3 distinct inputs): the same formula in plain binary64 misses exactly those 5.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b28be6662097cc6e405878befd8564f90fdbd951",
          "locator": "asinh_kernel",
          "note": "the route as implemented",
          "path": "crates/calc-func/src/ported/asinh.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b28be6662097cc6e405878befd8564f90fdbd951",
          "locator": "asinh_stores_each_identity_operation_from_pc64",
          "note": "the three inputs that need the stored steps",
          "path": "crates/calc-func/tests/f1_math.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "ASINH",
          "note": "matched rows per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        },
        {
          "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
          "locator": null,
          "note": "3,017 recorded rows",
          "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
          "repository": "CalcFunc-Evidence"
        },
        {
          "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
          "locator": null,
          "note": "1,517 recorded rows, the same inputs read again",
          "path": "runs/w111-5-20260924/answers/answers-w1115-asinh.json.gz",
          "repository": "CalcFunc-Evidence"
        }
      ],
      "functions": [
        "FUNC.ASINH"
      ],
      "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.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ASINH-001",
      "open": [
        "Only one Excel build, 20430, has been read over this range."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ASINH(-1.0126103340069186e-11)",
          "correct": {
            "bits": "0xbda6447d498e6f26",
            "display": "-1.0126103340069186e-11",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": "0xbda6447fffff840a",
            "display": "-1.0126122162949859e-11",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbda6447d498e6f26",
                "display": "-1.0126103340069186e-11",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0xbda6447d498e6f26",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(-1.4901631254755754e-16)",
          "correct": {
            "bits": "0xbca579bb4790a498",
            "display": "-1.4901631254755754e-16",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": "0xbcafffffffffffff",
            "display": "-2.2204460492503128e-16",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbca579bb4790a498",
                "display": "-1.4901631254755754e-16",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0xbca579bb4790a498",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(1.0501151062119094e-16)",
          "correct": {
            "bits": "0x3c9e447b5a2fd072",
            "display": "1.0501151062119094e-16",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3c9e447b5a2fd072",
                "display": "1.0501151062119094e-16",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0x3c9e447b5a2fd072",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(5e-324)",
          "correct": {
            "bits": "0x0000000000000001",
            "display": "5e-324",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0000000000000001",
                "display": "5e-324",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0x0000000000000001",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(7.193439987815484e-08)",
          "correct": {
            "bits": "0x3e734f4b587c8346",
            "display": "7.193439987815477e-08",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3e734f4b58591206",
            "display": "7.19343998474134e-08",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3e734f4b587c834b",
                "display": "7.193439987815484e-08",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0x3e734f4b587c834b",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(9.234293629925394e+153)",
          "correct": null,
          "excel": {
            "bits": "0x40763362acc0ad1b",
            "display": "355.2115905310072",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x5fe60a092f72d845",
                "display": "9.234293629925394e+153",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0x5fe60a092f72d845",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ASINH(2.3842260672008416e+154)",
          "correct": {
            "bits": "0x4076428fe05b79d7",
            "display": "356.1601260731963",
            "how": "mpmath asinh at 2000 bits, rounded to the nearest binary64",
            "kind": "number"
          },
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x5ffc73a8ae6c7c25",
                "display": "2.3842260672008416e+154",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "ASINH|0x5ffc73a8ae6c7c25",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ASINH.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "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.",
      "status": "measured",
      "title": "ASINH is LN(|x|+SQRT(x*x+1)) with every step stored, so small inputs lose their digits"
    },
    {
      "basis": "8 recorded readings.",
      "documentation": null,
      "evidence": [
        {
          "commit": "36ff603e690aca6e53930870c02fd5fa92a9004a",
          "locator": "recorded_bahttext_retains_the_sign_of_a_negative_amount",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.BAHTTEXT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-BAHTTEXT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "BAHTTEXT(-0.001)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ลบศูนย์บาทถ้วน",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbf50624dd2f1a9fc",
                "display": "-0.001",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1210, key BAHTTEXT|0xbf50624dd2f1a9fc",
            "note": null,
            "path": "cache/oracle-20430/build-20430/BAHTTEXT.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BAHTTEXT(-0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ศูนย์บาทถ้วน",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8000000000000000",
                "display": "-0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1225, key BAHTTEXT|0x8000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/BAHTTEXT.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BAHTTEXT(-0.005)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ลบหนึ่งสตางค์",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbf747ae147ae147b",
                "display": "-0.005",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1212, key BAHTTEXT|0xbf747ae147ae147b",
            "note": null,
            "path": "cache/oracle-20430/build-20430/BAHTTEXT.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "A negative amount that rounds to zero satang still gets the word for minus, ลบ: BAHTTEXT(-0.001) is ลบศูนย์บาทถ้วน. -0 gives plain ศูนย์บาทถ้วน.",
      "status": "measured",
      "title": "A tiny negative amount keeps the word for minus before zero baht"
    },
    {
      "basis": "All 1,318 recorded BESSELI recorded rows match (825 gained, no row lost in the recorded rows).",
      "documentation": null,
      "evidence": [
        {
          "commit": "d62b1283bbfe1582589afa37702d7a6d91bdb901",
          "locator": "lines 354-468",
          "note": "recorded answers pinned; the ITK body in the product",
          "path": "crates/calc-func/tests/f1_engineering.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "130ec21b3da03276c01fb27dce70463f08f90d9a",
          "locator": "product; bank.own_BESSELI_gains",
          "note": "research round 22 result",
          "path": "round22-result.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.BESSELI"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-BESSELI-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "BESSELI(12.514410892637624, 3.987394155038235)",
          "correct": {
            "bits": "0x40d4dc0018982a92",
            "display": "21360.00150112302",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x40d4dc000ce65cba",
            "display": "21360.000787344507",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40290760dd512b66",
                "display": "12.514410892637624",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x400fe62ee82134c8",
                "display": "3.987394155038235",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELI-00633",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besseli.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(1.8661547234119729, 7.047660373731416)",
          "correct": {
            "bits": "0x3f21d7fd6e62c6a2",
            "display": "0.00013613670961869657",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3f21d7fd6fe380e0",
            "display": "0.0001361367103021099",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3ffddbc50e25491c",
                "display": "1.8661547234119729",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x401c30cde189f75e",
                "display": "7.047660373731416",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELI-00440",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besseli.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(13.469754413420809, 10.617422640816173)",
          "correct": {
            "bits": "0x409e95e8f2dc3451",
            "display": "1957.477488938039",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x409e95e8e2cdac05",
            "display": "1957.477427686333",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x402af083a685968c",
                "display": "13.469754413420809",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x40253c1ed2043b18",
                "display": "10.617422640816173",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELI-00674",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besseli.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "BESSELI truncates n to an integer and evaluates the body published in ITK with every operation stored from the x87 unit at precision 64: the I0 and I1 polynomials, and for higher orders Miller backward recurrence from j = 2*(n + int(sqrt(40*n))), rescaling by 1E-10 whenever |q| > 1E10, then normalising by I0(x). The same body in plain binary64 misses by 1 to 4 units in the last place. The published ITK body is itkGaussianOperator.hxx at ITK 311b7060ef39e371f3cd209ec135284ff5fde735 (Apache-2.0).",
      "status": "measured",
      "title": "BESSELI is ITK's published polynomial and recurrence, on the x87 unit"
    },
    {
      "basis": "Every numeric row of the extended capture of each function, compared with mpmath at 200 bits.",
      "documentation": null,
      "evidence": [
        {
          "commit": "130ec21b3da03276c01fb27dce70463f08f90d9a",
          "locator": "product; bank.own_BESSELI_gains",
          "note": "research round 22 result",
          "path": "round22-result.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.BESSELI",
        "FUNC.BESSELK"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-BESSELI-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "BESSELI(-1, 0)",
          "correct": {
            "bits": "0x3ff441ce4b386c2d",
            "display": "1.2660658777520084",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff441ce433e3c05",
            "display": "1.2660658480342601",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0xbff0000000000000",
                "display": "-1",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELI-00001",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besseli.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(12.514410892637624, 3.987394155038235)",
          "correct": {
            "bits": "0x40d4dc0018982a92",
            "display": "21360.00150112302",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x40d4dc000ce65cba",
            "display": "21360.000787344507",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40290760dd512b66",
                "display": "12.514410892637624",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x400fe62ee82134c8",
                "display": "3.987394155038235",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELI-00633",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besseli.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELK(1.8447401994787955, 0.15119840195885237)",
          "correct": {
            "bits": "0x3fc1aa1430e4f602",
            "display": "0.13800289523526038",
            "how": "mpmath besselk at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fc1aa1445c5bb34",
            "display": "0.1380029049573409",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3ffd840e4ca60c0e",
                "display": "1.8447401994787955",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x3fc35a781fcf7430",
                "display": "0.15119840195885237",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111extended-2026092903-BESSELK-00698",
            "note": null,
            "path": "cache/w111-extended-regenerated-20260929/answers-besselk.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "BESSELI and BESSELK are low-order polynomial approximations. Over the recorded numeric rows with non-negative order, BESSELI gives the correctly rounded value on 2 of 1163 rows and BESSELK on 0 of 1155, with largest relative errors 5.0e-04 and 1.7e-07. BESSELI(-1,0) is 1.2660658480342601 where I0(1) is 1.2660658777520084, about 2.3E-8 relative.",
      "status": "measured",
      "title": "BESSELI and BESSELK are low-order approximations, rarely correctly rounded"
    },
    {
      "basis": "Readings at x = 709.7 for orders 0, 1, 2 and 3, compared with mpmath.",
      "documentation": null,
      "evidence": [
        {
          "commit": "130ec21b3da03276c01fb27dce70463f08f90d9a",
          "locator": "product; bank.own_BESSELI_gains",
          "note": "research round 22 result",
          "path": "round22-result.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.BESSELI"
      ],
      "inferred": "That the fixed start is the cause is inferred: a binary64 transcription of the published body gives the same bits for orders 0, 2 and 3 at this x.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-BESSELI-003",
      "open": [
        "How far the error extends at other x is not measured."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "BESSELI(709.7, 3)",
          "correct": {
            "bits": "0x7f8c0f97bbe572f6",
            "display": "2.4631300544524576e+306",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7f7a56f66ecd12a0",
            "display": "1.1560227990465618e+306",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999a",
                "display": "709.7",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "2df115b9512d49c5d21cef02706b4616a130fe96",
            "locator": "line 177, id r16-besseli-021",
            "note": null,
            "path": "evidence/round18/r16-published-score/observations.jsonl",
            "repository": "DnaCalc-Research"
          }
        },
        {
          "call": "BESSELI(709.7, 2)",
          "correct": {
            "bits": "0x7f8c28f5d197b1dd",
            "display": "2.47182813908566e+306",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7f8c3732e70ce6f9",
            "display": "2.4767103124440567e+306",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999a",
                "display": "709.7",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "dec750f16294cb25a0bc00b90225b0eaeeb8d390",
            "locator": "r11-struct-besseli-09",
            "note": null,
            "path": "readings/excel-20527/BESSELI.json",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(709.7, 0)",
          "correct": {
            "bits": "0x7f8c3d519a191ac9",
            "display": "2.4788087273156452e+306",
            "how": "mpmath besseli at 800 bits, order the integer part of n, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7f8c3d51558ee541",
            "display": "2.4788083687166675e+306",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999a",
                "display": "709.7",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "dec750f16294cb25a0bc00b90225b0eaeeb8d390",
            "locator": "r11-struct-besseli-01",
            "note": null,
            "path": "readings/excel-20527/BESSELI.json",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Excel's recurrence for orders above 1 starts at a fixed j = 2*(n + int(sqrt(40*n))), which is far too low at large x. At x = 709.7 BESSELI of order 2 is 0.20% high, and order 3 is 53% low, where I3(709.7) is 2.4631E306. Orders 0 and 1, which use the polynomial and not the recurrence, are within about 1.6E-7 at the same x.",
      "status": "measured",
      "title": "At large x the fixed recurrence start makes BESSELI badly wrong"
    },
    {
      "basis": "Adjacent-input readings at the boundary.",
      "documentation": null,
      "evidence": [
        {
          "commit": "f2e72693a5c7871cae57de79f69c3b011e5b9c61",
          "locator": "line 108",
          "note": "the boundary in the product",
          "path": "crates/calc-func/tests/f1_engineering.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.BESSELI"
      ],
      "inferred": "That the same cut-off applies at every other order is inferred.",
      "kind": "quirk",
      "note_id": "FN-BESSELI-004",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "BESSELI(709.7, 0)",
          "correct": null,
          "excel": {
            "bits": "0x7f8c3d51558ee541",
            "display": "2.4788083687166675e+306",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999a",
                "display": "709.7",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "dec750f16294cb25a0bc00b90225b0eaeeb8d390",
            "locator": "r11-struct-besseli-01",
            "note": null,
            "path": "readings/excel-20527/BESSELI.json",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(709.7000000000002, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999b",
                "display": "709.7000000000002",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "dec750f16294cb25a0bc00b90225b0eaeeb8d390",
            "locator": "r11-struct-besseli-02",
            "note": null,
            "path": "readings/excel-20527/BESSELI.json",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "BESSELI(709.7000000000002, 1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x40862d999999999b",
                "display": "709.7000000000002",
                "kind": "number"
              }
            },
            {
              "name": "n",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "dec750f16294cb25a0bc00b90225b0eaeeb8d390",
            "locator": "r11-struct-besseli-06",
            "note": null,
            "path": "readings/excel-20527/BESSELI.json",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "BESSELI returns a number at |x| = 709.7 and #NUM! at the next binary64 above it, although I0 there is about 2.48E306, well inside the binary64 range. Recorded for orders 0, 1, 2, 3, 10 and 100, and for negative x at orders 0 to 2.",
      "status": "measured",
      "title": "BESSELI gives #NUM! just above 709.7, where the function is still finite"
    },
    {
      "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"
    },
    {
      "basis": "One recorded array reading, with ROWS 1 and COLUMNS 2 from observer cells, and one scalar ISREF reading with a reference to another workbook.",
      "documentation": null,
      "evidence": [
        {
          "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
          "locator": "sheet fn2_q193",
          "note": null,
          "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "1ec418b2c1301d36309d717999512776b1d8630d",
          "locator": "dc-b1l.24",
          "note": "review record",
          "path": ".beads/issues.jsonl",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.CHOOSE"
      ],
      "inferred": "That a scalar index over an empty cell gives ISBLANK TRUE is inferred from the ISREF reading. No ISBLANK reading of it is recorded.",
      "kind": "quirk",
      "note_id": "FN-CHOOSE-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=ISBLANK(CHOOSE({1,2},Data!Z1,Data!Z2))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{FALSE,FALSE}",
            "kind": "array"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q193, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ISREF(CHOOSE(1,[ylr-source.xlsx]Sheet1!A1))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 Main, row 54, column 1",
            "note": "The recorded formula names the source workbook by its full path",
            "path": "crates/calc-host/tests/captures/dc_ylr/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "When an array index_num lifts CHOOSE in dynamic-array Excel, selected empty cells come back as the number 0 rather than as blank references, so ISBLANK over them is FALSE. With a scalar index the selected reference survives: ISREF(CHOOSE(1,ref)) was recorded TRUE.",
      "status": "measured",
      "title": "An array index in CHOOSE turns selected blank cells into 0"
    },
    {
      "basis": "One recorded reading.",
      "documentation": null,
      "evidence": [
        {
          "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
          "locator": "sheet fn2_q187",
          "note": null,
          "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "1cccd45a8e55db2363b6afeefa1505fc645d8dbe",
          "locator": "recorded_countblank_optional_lambda_omission_is_a_value_error",
          "note": "recorded answer pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.COUNTBLANK"
      ],
      "inferred": "That this holds for missing values in general is inferred.",
      "kind": "quirk",
      "note_id": "FN-COUNTBLANK-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=LAMBDA([xx],COUNTBLANK(xx))()",
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q187, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "An optional LAMBDA parameter left out reaches COUNTBLANK as a missing value, and the result is #VALUE!, not a count of 1.",
      "status": "measured",
      "title": "COUNTBLANK of an omitted optional LAMBDA parameter is #VALUE!"
    },
    {
      "basis": "All 5,584 rows of three recorded sets: 3,012 and 1,512 rows from build 20430, 1,060 from build 20131. The rule was recomputed independently from the calendar and matched all 5,566 number rows with settlement at serial 61 or later, on every basis. The other two number rows have settlement 0 and basis 0, and read 180. In a study of 42 ways to walk and measure the schedule, this was the only one to match all 965 rows with basis exactly 1.",
      "documentation": null,
      "evidence": [
        {
          "commit": "14910720ec396f241b46460ecab093f71733c5f5",
          "locator": "coupdays_kernel",
          "note": "the rule as implemented",
          "path": "crates/calc-func/src/ported/coupon_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "14910720ec396f241b46460ecab093f71733c5f5",
          "locator": "coupdays_actual_actual_uses_its_recorded_calendar_interval",
          "note": "six recorded calls pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "19d810d45ad46fe5d2ddf0f4f582dd603a881a91",
          "locator": null,
          "note": "the 42 schedule variants compared on 965 basis 1 rows",
          "path": "evidence/round24/coupon/coupon-calendar-summary.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "19d810d45ad46fe5d2ddf0f4f582dd603a881a91",
          "locator": null,
          "note": "5,584 of 5,584 rows matched",
          "path": "evidence/round24/coupon/coupdays-registered-delta.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "COUPDAYS",
          "note": "matched rows per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        },
        {
          "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
          "locator": null,
          "note": "1,512 recorded rows, inputs read again",
          "path": "runs/w111-5-20260924/answers/answers-w1115-coupdays.json.gz",
          "repository": "CalcFunc-Evidence"
        }
      ],
      "functions": [
        "FUNC.COUPDAYS",
        "FUNC.COUPNCD",
        "FUNC.COUPPCD"
      ],
      "inferred": "The rule reproduces every recorded row; that Excel's code works this way is inferred. For basis 1 no settlement or maturity before serial 61, where Excel's calendar differs from the Gregorian one, is in the recorded rows.",
      "kind": "quirk",
      "note_id": "FN-COUPDAYS-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "COUPDAYS(35748, 35976, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4066e00000000000",
            "display": "183",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e1748000000000",
                "display": "35748",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e1910000000000",
                "display": "35976",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e1748000000000|0x40e1910000000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(36452, 36891, 4, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4056c00000000000",
            "display": "91",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e1cc8000000000",
                "display": "36452",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e2036000000000",
                "display": "36891",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e1cc8000000000|0x40e2036000000000|0x4010000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(36812, 47907, 4, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4057000000000000",
            "display": "92",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e1f98000000000",
                "display": "36812",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e7646000000000",
                "display": "47907",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e1f98000000000|0x40e7646000000000|0x4010000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(37015, 38137, 4, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4056400000000000",
            "display": "89",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e212e000000000",
                "display": "37015",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e29f2000000000",
                "display": "38137",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e212e000000000|0x40e29f2000000000|0x4010000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(38044, 38411, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4067000000000000",
            "display": "184",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e2938000000000",
                "display": "38044",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e2c16000000000",
                "display": "38411",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e2938000000000|0x40e2c16000000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(34911, 35216, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4066e00000000000",
            "display": "183",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e10be000000000",
                "display": "34911",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e1320000000000",
                "display": "35216",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e10be000000000|0x40e1320000000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPPCD(44043, 2958465, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x40e57d8000000000",
            "display": "44012",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e5816000000000",
                "display": "44043",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4146924080000000",
                "display": "2958465",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPPCD|0x40e5816000000000|0x4146924080000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPPCD.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPNCD(44043, 2958465, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x40e5948000000000",
            "display": "44196",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e5816000000000",
                "display": "44043",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4146924080000000",
                "display": "2958465",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPNCD|0x40e5816000000000|0x4146924080000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPNCD.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "COUPDAYS(44043, 2958465, 2, 1)",
          "correct": null,
          "excel": {
            "bits": "0x4066e00000000000",
            "display": "183",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e5816000000000",
                "display": "44043",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4146924080000000",
                "display": "2958465",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "COUPDAYS|0x40e5816000000000|0x4146924080000000|0x4000000000000000|0x3ff0000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/COUPDAYS.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "On basis 1 (actual/actual) COUPDAYS does not always equal COUPNCD minus COUPPCD. Its rule: start at maturity and step back by 12/frequency months. Each step keeps the day of the month and clamps it to the length of the target month, and the clamped date is the start of the next step, so passing through February lowers the day for every earlier date. Stop at the last date still after settlement, call it next. The answer is the number of actual days from one period before next up to next, and this last step keeps month ends: if next is the last day of its month, the start is the last day of its month. On the other bases the answer is 360/frequency (bases 0, 2, 4) or 365/frequency (basis 3). With this rule, all 5,584 recorded rows match (4,072 distinct inputs): 5,568 numbers and 16 #NUM!, from Excel builds 20131 and 20430. Of the 967 basis 1 rows, 81 (49 distinct inputs) differ from the day count between the dates of a schedule anchored on maturity with month ends kept. For maturity 1998-06-30 with semi-annual coupons, COUPDAYS(35748,35976,2,1) is 183, from 1997-06-30 to 1997-12-30; the anchored schedule gives 184. In one recorded case all three functions were read on the same inputs: COUPNCD(44043,2958465,2,1) less COUPPCD is 44196 - 44012 = 184, and COUPDAYS is 183.",
      "status": "measured",
      "title": "On basis 1 COUPDAYS walks back from maturity by its own rule, not COUPPCD to COUPNCD"
    },
    {
      "basis": "1,664 recorded rows with a number answer on basis 0, from builds 20131, 20430 and 20527, recomputed independently from the calendar. An implementation of these rules matches all 33,504 selected readings of the six coupon functions. Fictitious 1900-02-29 is not a month end here.",
      "documentation": null,
      "evidence": [
        {
          "commit": "7ec08d6707059ef1d74922ac9b8e0769f6093312",
          "locator": "coupdaysnc_kernel",
          "note": "the rule as implemented",
          "path": "crates/calc-func/src/ported/coupon_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "733 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "120 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYBS.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "dc-zmk.4",
          "note": "the 33,504 selected coupon readings",
          "path": ".beads/issues.jsonl",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.COUPDAYBS",
        "FUNC.COUPDAYS",
        "FUNC.COUPDAYSNC"
      ],
      "inferred": "The split into P and A reproduces every row; that Excel's code forms these two counts is inferred. For the February cases in this note only COUPDAYSNC is recorded: their A comes from the rule, not from a COUPDAYBS reading.",
      "kind": "quirk",
      "note_id": "FN-COUPDAYSNC-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "COUPDAYSNC(39923, 50919, 4, 0)",
          "correct": null,
          "excel": {
            "bits": "0x4043800000000000",
            "display": "39",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e37e6000000000",
                "display": "39923",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e8dce000000000",
                "display": "50919",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYSNC-remaining-calendar-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPDAYSNC(45986, 57038, 2, 0)",
          "correct": null,
          "excel": {
            "bits": "0x4057c00000000000",
            "display": "95",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e6744000000000",
                "display": "45986",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40ebd9c000000000",
                "display": "57038",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYSNC-remaining-calendar-2",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPDAYSNC(46478, 46627, 4, 0)",
          "correct": null,
          "excel": {
            "bits": "0x404c800000000000",
            "display": "57",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e6b1c000000000",
                "display": "46478",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e6c46000000000",
                "display": "46627",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYSNC-full-period-holdout-90",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPDAYSNC(33, 400, 2, 0)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x4040800000000000",
                "display": "33",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4079000000000000",
                "display": "400",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYSNC-calendar-boundary-127",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPDAYBS(61, 456, 1, 0)",
          "correct": null,
          "excel": {
            "bits": "0x404e800000000000",
            "display": "61",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x404e800000000000",
                "display": "61",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x407c800000000000",
                "display": "456",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYBS-fake-february-43",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYBS.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPDAYSNC(61, 456, 1, 0)",
          "correct": null,
          "excel": {
            "bits": "0x403d000000000000",
            "display": "29",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x404e800000000000",
                "display": "61",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x407c800000000000",
                "display": "456",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPDAYSNC-fake-february-43",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPDAYSNC.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "On basis 0 (US 30/360), COUPDAYSNC is P - A. A is COUPDAYBS, the accrued days. P is a 30/360 count between the actual previous and next coupon dates, with day 31 and the last day of February both counted as day 30. COUPDAYS on basis 0 is always 360/frequency, but P need not be: when a coupon falls on the last day of February and maturity is not a month end, P can be 88, 89 or 92 for a quarter and 178 or 182 for a half year. So COUPDAYSNC(39923,50919,4,0), with coupons 2009-02-28 and 2009-05-29, is 39: P is 89 and A is 50, where 90 - 50 would give 40. With no coupon date before settlement in Excel's calendar, the period starts at serial 0: COUPDAYSNC(33,400,2,0) is 1, and for settlement 61, maturity 456 and annual coupons COUPDAYBS plus COUPDAYSNC is 90, not 360. This rule matches all 1,664 recorded number rows on basis 0, 733 of them chosen near February, month ends and the start of the calendar.",
      "status": "measured",
      "title": "On basis 0 COUPDAYSNC is not always COUPDAYS minus COUPDAYBS"
    },
    {
      "basis": "The rule matches all 429 recorded COUPNUM readings (325 #NUM!, 104 counts) when recomputed independently from the calendar, and the 24 COUPNUM readings of the date-boundary sheets. COUPPCD, COUPNCD, COUPDAYS, COUPDAYBS and COUPDAYSNC companions come from the same sheets.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2033d9feb7d9f99817b4b2b34837509bf5af843c",
          "locator": "coupnum_kernel",
          "note": "the limit as implemented",
          "path": "crates/calc-func/src/ported/coupon_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "delivered_fn4_coupon_counts_at_calendar_start",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "429 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/COUPNUM.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qd153 to qd236",
          "note": "boundary sheets for all six coupon functions",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-date-domain.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.COUPNCD",
        "FUNC.COUPNUM",
        "FUNC.COUPPCD"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-COUPNUM-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "COUPNUM(33, 400, 2, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x4040800000000000",
                "display": "33",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4079000000000000",
                "display": "400",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPNUM-calendar-boundary-127",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPNUM.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPNUM(34, 400, 2, 0)",
          "correct": null,
          "excel": {
            "bits": "0x4000000000000000",
            "display": "2",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x4041000000000000",
                "display": "34",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4079000000000000",
                "display": "400",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPNUM-calendar-boundary-128",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPNUM.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "COUPNUM(0, 367, 2, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4076f00000000000",
                "display": "367",
                "kind": "number"
              }
            },
            {
              "name": "frequency",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-COUPNUM-calendar-boundary-85",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/COUPNUM.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=COUPNUM(0,182,2,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 qd230, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-date-domain.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=COUPNUM(A1,400,2,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "A1",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "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 qd205, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-date-domain.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=COUPPCD(A1,400,2,0)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "A1",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "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 qd217, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-date-domain.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=COUPNCD(A1,400,2,0)",
          "correct": null,
          "excel": {
            "bits": "0x4041000000000000",
            "display": "34",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "A1",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "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 qd193, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-date-domain.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "If the coupon date before settlement, counted back from maturity, falls before 1 January 1900, COUPNUM gives #NUM!. The other coupon functions still answer for the same inputs: COUPPCD returns 0, COUPNCD the next coupon, and COUPDAYS, COUPDAYBS and COUPDAYSNC a day count. With maturity serial 400 (1901-02-03) and semi-annual coupons, the coupon dates are serials 34 and 216: settlement 33 gives #NUM!, settlement 34 gives 2. With maturity 367, settlement 0 gives #NUM! and settlement 1 gives 2. This covers settlement 0 too: COUPNUM(0,m,2,0) was #NUM! for every maturity read.",
      "status": "measured",
      "title": "COUPNUM is #NUM! when the coupon before settlement falls before 1900"
    },
    {
      "basis": "One loan block of the catalogue capture, recomputed from the recorded answers by binary64 arithmetic, and 135 recorded single-period CUMPRINC rows compared with PPMT's route.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "section UPDATE, open item 3",
          "note": "research write-up",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "6c6cbd31c960fe1ac07d5cce9cb33ca9d7d86cf5",
          "locator": null,
          "note": "the commit message states the 79 of 135 and the loss class",
          "path": "crates/calc-func/src/ported/cumulative_finance_family.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.CUMIPMT",
        "FUNC.CUMPRINC"
      ],
      "inferred": "That the 79 single-period differences are CUMPRINC's own and not PPMT's rests on the PPMT route, which matches every fv 0, type 0 row tested. That CUMIPMT remains count*PMT less CUMPRINC beyond this block is inferred.",
      "kind": "bit-matching-detail",
      "note_id": "FN-CUMPRINC-001",
      "open": [
        "CUMPRINC's per-period route. Recurrences, closed balances, count*PMT less interest and binary64 variants all stay below PPMT's 56 of 135. Recorded rows now match CUMPRINC 185 of 586 and CUMIPMT 12 of 38."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=CUMPRINC(0.05/12,360,200000,1,12,0)",
          "correct": null,
          "excel": {
            "bits": "0xc0a70d761d260042",
            "display": "-2950.7306911349597",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 751, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=CUMIPMT(0.05/12,360,200000,1,12,0)",
          "correct": null,
          "excel": {
            "bits": "0xc0c3667e7f577146",
            "display": "-9932.988261156377",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 752, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=PMT(0.05/12,360,200000)",
          "correct": null,
          "excel": {
            "bits": "0xc090c692af15f63a",
            "display": "-1073.6432460242781",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 726, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "On the 30-year loan, CUMPRINC(0.05/12,360,200000,1,12,0) equals the left-to-right binary64 sum of Excel's own twelve PPMT answers, to the last bit, and CUMIPMT over the same periods equals 12*PMT - CUMPRINC, computed from Excel's own answers, to the last bit. That does not generalise: over recorded type 0 calls for a single period, CUMPRINC equals PPMT on 56 of 135 rows and differs on 79, with PPMT computed by the route in FN-IPMT-001.",
      "status": "measured",
      "title": "CUMPRINC follows PPMT on one loan and not in general; its own route is open"
    },
    {
      "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": "2,400 of 2,400 rows for each function with stored precision-64 arithmetic. Plain binary64 matches 2,398 to 2,399 of the same rows, so few rows separate the two; keeping intermediates in 80-bit registers without stores loses 475 to 1,335.",
      "documentation": null,
      "evidence": [
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 435-466",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "counts",
          "note": "stored-PC64 against other precisions",
          "path": "evidence/round23/security-1900-hard/summary.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "recorded_completed_groups",
          "note": "18,040 of 18,040 outcomes",
          "path": "round23-result.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.DISC",
        "FUNC.INTRATE",
        "FUNC.PRICEDISC",
        "FUNC.RECEIVED",
        "FUNC.TBILLYIELD"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-DISC-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "DISC(37655, 38261, 94.87631295104353, 102.73579504052532, 3)",
          "correct": {
            "bits": "0x3fa79784b622b019",
            "display": "0.04607786868413672",
            "how": "Exact rational value of the same formula from the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fa79784b622b014",
            "display": "0.046077868684136686",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e262e000000000",
                "display": "37655",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e2aea000000000",
                "display": "38261",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4057b81582ea72c4",
                "display": "94.87631295104353",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059af174414e760",
                "display": "102.73579504052532",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1458, key DISC|0x40e262e000000000|0x40e2aea000000000|0x4057b81582ea72c4|0x4059af174414e760|0x4008000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/DISC.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TBILLYIELD(47701, 47702, 2.279784366464575)",
          "correct": {
            "bits": "0x40ce237bcaff5178",
            "display": "15430.967132487087",
            "how": "Exact rational value of the same formula from the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x40ce237bcaff517a",
            "display": "15430.96713248709",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e74aa000000000",
                "display": "47701",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e74ac000000000",
                "display": "47702",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x40023cff95ff2def",
                "display": "2.279784366464575",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 413, key TBILLYIELD|0x40e74aa000000000|0x40e74ac000000000|0x40023cff95ff2def",
            "note": null,
            "path": "cache/oracle-20430/build-20430/TBILLYIELD.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0)",
          "correct": null,
          "excel": {
            "bits": "0xc01cccaed31c9766",
            "display": "-7.199885653133469",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40ec968000000000",
                "display": "58548",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40ec9ce000000000",
                "display": "58599",
                "kind": "number"
              }
            },
            {
              "name": "investment",
              "value": {
                "bits": "0x411a27d089707de5",
                "display": "428532.13421818457",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x401b39132211b6ad",
                "display": "6.805737049418593",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 2326, key INTRATE|0x40ec968000000000|0x40ec9ce000000000|0x411a27d089707de5|0x401b39132211b6ad|0x0000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/INTRATE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With B the year basis and D the day count, Excel evaluates DISC = (1 - pr/red) * (B/D); INTRATE = ((red - inv)/inv) * (B/D); RECEIVED = inv / (1 - (disc*D)/B); PRICEDISC = red - ((disc*red)*D)/B; TBILLYIELD = ((100 - pr)/pr) * (360/D), each + - * / taken from the x87 unit at precision 64 and stored to binary64. Results can sit several units from the exact value: the DISC row below is 5 units below it.",
      "status": "measured",
      "title": "The discount-security functions run a fixed formula order on the x87 unit"
    },
    {
      "basis": "Four recorded readings of the same value.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qt169 to qt172",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "recorded_dollar_retains_a_negative_sign_after_rounding",
          "note": "DOLLAR readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.DOLLAR",
        "FUNC.FIXED",
        "FUNC.TEXT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-DOLLAR-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=DOLLAR(-0.005,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "-R0",
            "kind": "text"
          },
          "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 qt172, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=FIXED(-0.005,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "0",
            "kind": "text"
          },
          "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 qt171, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(-0.005,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "0",
            "kind": "text"
          },
          "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 qt169, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(-0.005,\"0\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "0",
            "kind": "text"
          },
          "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 qt170, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "-0.005 rounded to no decimals is zero. DOLLAR(-0.005,0) shows that as -R0 in en-ZA settings, keeping the sign of the input, while FIXED(-0.005,0), TEXT(-0.005,0) and TEXT(-0.005,\"0\") show 0.",
      "status": "measured",
      "title": "DOLLAR keeps the minus sign on an amount that rounds to zero; FIXED and TEXT drop it"
    },
    {
      "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"
    },
    {
      "basis": "220,000 Excel answers from 0.5 to 26.5 (build 20527) compared with E times the true exp(x*x)*erfc(x). With z = RN(x*x) and E stored, the residual stays within about 10 units of 2^-53 at every x. At x = 24 the exact exp(-x*x) spreads with a standard deviation of 287 units, Cody's and fdlibm's fractional splits of x*x spread the same, and plain binary64 x*x leaves outliers of up to 1,024 units.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "Round 4: ERFC above 0.5",
          "note": "the residual table, what is known about F",
          "path": "content/notes/evidence/2026-11-04/erf-EVIDENCE-round3.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "d85e5e9b52c601323dacc4369b9edc8146c98357",
          "locator": "erfc_upper",
          "note": "the commit stores z and E and uses Cody's rational in place of F; its message carries the row counts",
          "path": "crates/calc-func/src/ported/normal_dist_common.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ERFC",
        "FUNC.ERFC.PRECISE"
      ],
      "inferred": "F is not a closed form: y = RN(E*RN(F)) with any offset matches 40% of answers at best. Its noise tracks about a dozen smooth curves, consistent with two polynomials of degree about 8 in x with shapes near Cephes' erfc P and Q, but that is a reading of shape only, and no table has been matched.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ERFC-001",
      "open": [
        "F, so the last bits: with a stand-in for F, recorded rows match ERFC 234 of 544 and ERFC.PRECISE 1,062 of 1,863, with no answer more than 6 units away.",
        "The mean of the residual is flat with sharp steps of about 0.4 units, at x = 1.11567925... and 1.1217 among about 80 in [0.5, 27]. No stored polynomial value varies that slowly, and this is unexplained."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ERFC.PRECISE(26.543000000000003)",
          "correct": {
            "bits": "0x001038a055f6cfff",
            "display": "2.2558350220535116e-308",
            "how": "mpmath erfc at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x001038a055f6d0d3",
            "display": "2.2558350220536164e-308",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x403a8b020c49ba5f",
                "display": "26.543000000000003",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 363, key ERFC.PRECISE|0x403a8b020c49ba5f",
            "note": null,
            "path": "cache/oracle/build-20131/ERFC.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ERFC.PRECISE(5.927083333333333)",
          "correct": {
            "bits": "0x3c8df497ca9a0a32",
            "display": "5.1964407001614313e-17",
            "how": "mpmath erfc at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3c8df497ca9a0a49",
            "display": "5.1964407001614455e-17",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x4017b55555555555",
                "display": "5.927083333333333",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 340, key ERFC.PRECISE|0x4017b55555555555",
            "note": null,
            "path": "cache/oracle/build-20131/ERFC.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ERFC.PRECISE(2.0)",
          "correct": {
            "bits": "0x3f7328f5ec350e67",
            "display": "0.004677734981047266",
            "how": "mpmath erfc at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3f7328f5ec350e65",
            "display": "0.0046777349810472645",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 64, key ERFC.PRECISE|0x4000000000000000",
            "note": null,
            "path": "cache/oracle/build-20131/ERFC.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, ERFC for x >= 0.5 behaves as Q = E*F with z = RN(x*x) and E = exp(-z) stored to binary64, then multiplied by a factor F that is not identified. So the rounding error of x*x reaches the answer at full size. At x = 26.543000000000003, x*x exceeds z by 4.64E-14, which at the size of this answer is about 212 units, and Excel's answer is 212 units above the correctly rounded erfc. Near x = 5.93 the same effect is 23 units. For small x, where x*x is exact or nearly so, the answer stays within a few units.",
      "status": "measured",
      "title": "Above 0.5, ERFC rounds x*x before the exponential, so the tail drifts by hundreds of units"
    },
    {
      "basis": "Four recorded readings of one cell holding #BUSY!.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "delivered_fn4_busy_error_is_typed_through_the_application",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets q093 to q096",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ERROR.TYPE"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-ERROR.TYPE-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=ERROR.TYPE(B1)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "#BUSY!",
                "kind": "error"
              }
            }
          ],
          "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 q095, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ISERROR(B1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "#BUSY!",
                "kind": "error"
              }
            }
          ],
          "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 q094, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IFERROR(B1,7)",
          "correct": null,
          "excel": {
            "bits": "0x401c000000000000",
            "display": "7",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "#BUSY!",
                "kind": "error"
              }
            }
          ],
          "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 q096, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=N(B1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#BUSY!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "B1",
              "value": {
                "bits": null,
                "display": "#BUSY!",
                "kind": "error"
              }
            }
          ],
          "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 q093, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With #BUSY! in the referenced cell, ERROR.TYPE gives 0, not one of its numbers for an error and not #N/A. The cell still counts as an error elsewhere: ISERROR is TRUE and IFERROR takes its fallback.",
      "status": "measured",
      "title": "ERROR.TYPE of #BUSY! is 0"
    },
    {
      "basis": "12 recorded readings.",
      "documentation": null,
      "evidence": [
        {
          "commit": "1474b041c8dfa99157933d00ef2f5f5a7982f379",
          "locator": "recorded_floor_zero_identity_precedes_its_multiple_error",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.FLOOR"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-FLOOR-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "FLOOR(0, 0)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "significance",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-FLOOR-00002",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "FLOOR(-0, -2)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8000000000000000",
                "display": "-0",
                "kind": "number"
              }
            },
            {
              "name": "significance",
              "value": {
                "bits": "0xc000000000000000",
                "display": "-2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-FLOOR-00005",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "FLOOR(1, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#DIV/0!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "significance",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-FLOOR-00062",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "FLOOR(0,0) and FLOOR(-0,0) return +0. A zero number with a negative significance also returns +0, not #NUM!. Only a nonzero number with significance 0 gives #DIV/0!.",
      "status": "measured",
      "title": "FLOOR of zero is +0, even with significance 0"
    },
    {
      "basis": "All 931 recorded rows with normal nonzero arguments and a number answer, Excel build 20430, recomputed for this note from the recorded inputs; the 1,335 rows of that capture also hold errors, zero and subnormal cases. On the 945 rows that include subnormal quotients, the plain route matches 857 and an exact floor 848. A separate 120 literal calls in build 20527 agree. The rule was first stated from readings of this family, so these counts are in sample.",
      "documentation": null,
      "evidence": [
        {
          "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
          "locator": null,
          "note": "the 1,335 readings",
          "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
          "repository": "CalcFunc-Evidence"
        }
      ],
      "functions": [
        "FUNC.FLOOR"
      ],
      "inferred": "That Excel's code rounds to 15 digits this way is inferred from the fit. Whether FLOOR.MATH and FLOOR.PRECISE take the same step has not been read.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-FLOOR-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "FLOOR(0.9999999999999999, 0.1)",
          "correct": {
            "bits": "0x3feccccccccccccd",
            "display": "0.9",
            "how": "Exact rational floor of number/significance, times significance, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3fefffffffffffff",
                "display": "0.9999999999999999",
                "kind": "number"
              }
            },
            {
              "name": "significance",
              "value": {
                "bits": "0x3fb999999999999a",
                "display": "0.1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-FLOOR-00083",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "FLOOR(4503599627370496, 2)",
          "correct": {
            "bits": "0x4330000000000000",
            "display": "4503599627370496",
            "how": "Exact rational floor of number/significance, times significance, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x4330000000000004",
            "display": "4503599627370500",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x4330000000000000",
                "display": "4503599627370496",
                "kind": "number"
              }
            },
            {
              "name": "significance",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-FLOOR-00109",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-floor.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "FLOOR behaves as s times the floor of number/s, where the quotient is first rounded to 15 significant decimal digits and the final product is taken in binary64. A quotient just under an integer therefore counts as that integer, and the result can exceed the number: FLOOR(0.9999999999999999,0.1) is 1. Once the quotient has more than 15 significant digits the step moves it by more than one unit, so an exact multiple can change: FLOOR(4503599627370496,2) is 4503599627370500.",
      "status": "measured",
      "title": "FLOOR rounds its quotient to 15 digits first, so the result can pass the number"
    },
    {
      "basis": "2,000 of 2,000 fractions at each i from 2 to 9, from Excel's own GAMMA(1+y) (build 20527). The same formula fails at i = 10. Replayed for this note in exact rational arithmetic on 300 of those fractions: 300 of 300 at each i from 2 to 9, 61 of 300 at i = 10. Recorded GAMMA rows match 6,406 of 12,603 with stand-ins for the seed and the Stirling series, the worst by 49 units.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: how the stored stages were read",
          "path": "content/notes/evidence/2026-11-04/gamma-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "1c7a4ab86b12b53d80947f06b6d381e8e5dd5f3f",
          "locator": null,
          "note": "the routes in the product, with stand-ins where the code says so; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/excel_numeric/gammaln.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "af74247e1ed54f0b535143f1305261b98d80d18e",
          "locator": null,
          "note": "rows matched per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GAMMA"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-GAMMA-001",
      "open": [
        "The seed GAMMA(1+y) on (1,2): about five stored smooth quantities, seen as lines in its noise. Cody's rational matches 33% of it. Many closed families were tested and refuted.",
        "x < 1 and negative arguments."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "GAMMA(1.6493607064491727)",
          "correct": null,
          "excel": {
            "bits": "0x3fecccf73c5e41af",
            "display": "0.900020234972592",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3ffa63c80d581b40",
                "display": "1.6493607064491727",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA 3ffa63c80d581b40",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "GAMMA(3.6493607064491727)",
          "correct": {
            "bits": "0x400f7681c7bb23e8",
            "display": "3.93286472358567",
            "how": "mpmath gamma at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x400f7681c7bb23e9",
            "display": "3.9328647235856704",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x400d31e406ac0da0",
                "display": "3.6493607064491727",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA 400d31e406ac0da0",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "GAMMA(5.649360706449173)",
          "correct": {
            "bits": "0x4050aeb312f3b058",
            "display": "66.7296798114561",
            "how": "mpmath gamma at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x4050aeb312f3b057",
            "display": "66.72967981145608",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x401698f2035606d0",
                "display": "5.649360706449173",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA 401698f2035606d0",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, write x = i + y with GAMMA(1+y) on (1,2). For i from 2 to 9, GAMMA(x) is RN(t*GAMMA(1+y)), where t is the product (x-1)(x-2)...(1+y) taken from the top with each product RN. Each stage rounds, so the answers are not correctly rounded: at the fraction below, GAMMA(3.649...) is 1 unit high and GAMMA(5.649...) 1 unit low. The seed on (1,2) is a chain of stored products that has not been identified, and at x = 10 the route changes (FN-GAMMA-002).",
      "status": "measured",
      "title": "Below 10, GAMMA is a stored product down to a seed on (1,2)"
    },
    {
      "basis": "Noise lines on windows of consecutive doubles (Excel build 20527): stored x^2 with weight x/2, then x^4, x^8 and x^16 at the frequencies a stored square of a stored value gives, stored ln x, and the bias. This chain gives every bit on 69.5% of 59,200 answers from 36 to 170.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: how the stored stages were read",
          "path": "content/notes/evidence/2026-11-04/gamma-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "1c7a4ab86b12b53d80947f06b6d381e8e5dd5f3f",
          "locator": null,
          "note": "the routes in the product, with stand-ins where the code says so; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/excel_numeric/gammaln.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "af74247e1ed54f0b535143f1305261b98d80d18e",
          "locator": null,
          "note": "rows matched per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GAMMA"
      ],
      "inferred": "The chain is read from the noise, and 30.5% of the answers in that range do not yet match, so at least one stored stage is missing. The series w is only seen as a line at 1/(12 m x), and below x = 30 it differs from the true series.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-GAMMA-002",
      "open": [
        "The Stirling series below x = 30, and the stored stage still missing above it."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "GAMMA(10.649360706449173)",
          "correct": {
            "bits": "0x41386b3cabbb5089",
            "display": "1600316.6708269438",
            "how": "mpmath gamma at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x41386b3cabbb5088",
            "display": "1600316.6708269436",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x40254c7901ab0368",
                "display": "10.649360706449173",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA 40254c7901ab0368",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "GAMMA(160.48267465838674)",
          "correct": {
            "bits": "0x7acd5c4d6f1f4f35",
            "display": "3.4109096900320908e+283",
            "how": "mpmath gamma at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7acd5c4d6f1f4edc",
            "display": "3.410909690032054e+283",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x40640f7212200c21",
                "display": "160.48267465838674",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA 40640f7212200c21",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "From x = 10, GAMMA behaves as sqrt(2 pi) x^x exp(-x) / sqrt(x) w with stored stages: x^2, x^4, x^8 and so on by binary powering of floor(x/2), stored ln x, exponent and exponential for the fraction of x/2, stored exp(-x), an unstored square root, and each outer product stored. The first factor is the binary64 value of sqrt(2 pi), whose rounding gives every band a bias of +0.66 of 2^-53. The answers' noise grows with x, with a root mean square of about 0.225*x units of 2^-53 above 20, so near x = 160 an answer can sit 89 units from the correctly rounded value, as below.",
      "status": "inferred",
      "title": "From 10 up, GAMMA is a Stirling product of stored stages, and its error grows with x"
    },
    {
      "basis": "Noise lines on windows of consecutive doubles (Excel build 20527) put ln x stored and multiplied by a, not a power of x. Storing t - x adds a slow line of amplitude 5, and leaving it unstored takes the noise at small x from 13 units of 2^-53 to 1.5. A scan of one constant factor per shape peaks at -0.875, +0.25, -1.25, +1.625 and -2 of 2^-53 for a = 2 to 6, and the first is the error of GAMMALN(3). This form matches 15,364 of 26,776 rows at a = 2, 15,588 of 26,770 at a = 3, 1,088 of 2,051 at a = 4, 654 of 1,142 at a = 5, 691 of 1,151 at a = 6, and over all shapes 47,647 of 77,975 recorded rows.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: how the stored stages were read",
          "path": "content/notes/evidence/2026-11-04/gamma-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "78de0f0a49cbb65d43c57f7cd4f4276848ed7eda",
          "locator": null,
          "note": "the prefactor in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/special_math_common.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "af74247e1ed54f0b535143f1305261b98d80d18e",
          "locator": null,
          "note": "rows matched per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GAMMA.DIST"
      ],
      "inferred": "The form is read from noise and scored in part: one stored stage of the prefactor or the sum is still missing, with a root mean square of about 0.8 of 2^-53 at small x. Non-integer shapes depend on GAMMALN below 3, which is not identified. An earlier reading of a chopped exponential in this function was this constant.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-GAMMA.DIST-001",
      "open": [
        "The missing stored stage of the prefactor or the sum.",
        "Shapes outside 2 to 6, and the upper arm of the distribution."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "GAMMA.DIST(0.010000000000003386, 2, 1, TRUE)",
          "correct": {
            "bits": "0x3f0a0a5081f5d23f",
            "display": "4.966791334029942e-05",
            "how": "mpmath regularized lower incomplete gamma at 800 bits, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3f0a0a5081f5d243",
            "display": "4.9667913340299445e-05",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3f847ae147ae1c1b",
                "display": "0.010000000000003386",
                "kind": "number"
              }
            },
            {
              "name": "alpha",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "beta",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": null,
                "display": "TRUE",
                "kind": "logical"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA.DIST 3f847ae147ae1c1b 4000000000000000",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "GAMMA.DIST(0.5000000000001851, 3, 1, TRUE)",
          "correct": {
            "bits": "0x3f8d774972ab2b89",
            "display": "0.014387677966984718",
            "how": "mpmath regularized lower incomplete gamma at 800 bits, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3f8d774972ab2b85",
            "display": "0.01438767796698471",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x3fe0000000000683",
                "display": "0.5000000000001851",
                "kind": "number"
              }
            },
            {
              "name": "alpha",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            },
            {
              "name": "beta",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": null,
                "display": "TRUE",
                "kind": "logical"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMA.DIST 3fe0000000000683 4008000000000000",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, the series arm and the density of GAMMA.DIST at integer shape a from 2 to 6 share r = RN(exp(t - x - GAMMALN(a+1))), with ln x stored, t = RN(a*ln x), and the difference held in the 64-bit registers. The cumulative answer is RN(r*S) with S the stored forward sum, and the density RN(r*a)/x, the division last; with a scale, y = RN(x/beta) comes first. So GAMMALN's own error is in every answer: at shape 2 the constant is GAMMALN(3), one unit above stored ln 2 (FN-GAMMALN-001).",
      "status": "inferred",
      "title": "GAMMA.DIST's prefactor carries GAMMALN(a+1) in the exponent, with its error"
    },
    {
      "basis": "6,000 of 6,000 fractions at each n from 3 to 7, 30,000 answers, from Excel's own GAMMALN(2+y) (build 20527). The descending product fits 5,430 to 5,527 of 6,000. Replayed for this note in exact rational arithmetic with a correctly rounded logarithm on 300 of those fractions: 300 of 300 at n = 3 to 6, and 299 of 300 at n = 7. Recorded rows match GAMMALN 2,106 of 4,538 and GAMMALN.PRECISE 10,627 of 14,278, with stand-ins for the bands below 3.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: how the stored stages were read",
          "path": "content/notes/evidence/2026-11-04/gamma-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "1c7a4ab86b12b53d80947f06b6d381e8e5dd5f3f",
          "locator": null,
          "note": "the routes in the product, with stand-ins where the code says so; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/excel_numeric/gammaln.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "af74247e1ed54f0b535143f1305261b98d80d18e",
          "locator": null,
          "note": "rows matched per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GAMMALN",
        "FUNC.GAMMALN.PRECISE"
      ],
      "inferred": "That GAMMALN.PRECISE takes the same route is inferred: the 30,000 answers are GAMMALN, and the two functions agree at every shared recorded input tried, including 3.",
      "kind": "bit-matching-detail",
      "note_id": "FN-GAMMALN-001",
      "open": [
        "The rationals below 3. They are rationals in x itself, [1.5,2) and [2,3] are separate bands, and their tables are not identified: no rescaled Cody-Hillstrom table and no fresh minimax table tried reproduces the steps of their mean error."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "GAMMALN(3)",
          "correct": {
            "bits": "0x3fe62e42fefa39ef",
            "display": "0.6931471805599453",
            "how": "ln 2, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fe62e42fefa39f0",
            "display": "0.6931471805599454",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 273, key GAMMALN|0x4008000000000000",
            "note": null,
            "path": "cache/oracle/build-20131/GAMMALN.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "GAMMALN.PRECISE(3)",
          "correct": {
            "bits": "0x3fe62e42fefa39ef",
            "display": "0.6931471805599453",
            "how": "ln 2, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fe62e42fefa39f0",
            "display": "0.6931471805599454",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20131, platform and bitness not recorded, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 22, key GAMMALN.PRECISE|0x4008000000000000",
            "note": null,
            "path": "cache/oracle/build-20131/GAMMALN.PRECISE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "GAMMALN(2.020222407046596)",
          "correct": null,
          "excel": {
            "bits": "0x3f81c75cc69b54fc",
            "display": "0.008681034861562235",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x4000296a5d874ad0",
                "display": "2.020222407046596",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMALN 4000296a5d874ad0",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "GAMMALN(6.020222407046596)",
          "correct": {
            "bits": "0x401349c26258ddb8",
            "display": "4.822030579256015",
            "how": "mpmath loggamma at 800 bits from the binary64 input, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x401349c26258ddb7",
            "display": "4.8220305792560145",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "x",
              "value": {
                "bits": "0x401814b52ec3a568",
                "display": "6.020222407046596",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "GAMMALN 401814b52ec3a568",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/gamma-readings.tsv",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, write x = n + y with n the integer part. For 3 < x < 8, Excel forms z = (y+2)(y+3)...(y+n-1) from the left with every product RN, and GAMMALN(x) is RN(RN(ln z) + GAMMALN(2+y)). So answers on this range carry the rounding of a value on [2,3]. x = 3 itself belongs to the band on [2,3], not to this route, and returns 0x3fe62e42fefa39f0, one unit above the stored ln 2, although GAMMALN(3) is exactly ln 2.",
      "status": "measured",
      "title": "GAMMALN from 3 to 8 is a stored recurrence, and GAMMALN(3) is one unit above ln 2"
    },
    {
      "basis": "All recorded rows match after the boundary change: GCD 7,966 of 7,966 and LCM 7,967 of 7,967.",
      "documentation": {
        "claim": "If a parameter to GCD is >=2^53, GCD returns the #NUM! error value. If LCM(a,b) >=2^53, LCM returns the #NUM! error value.",
        "source": "https://support.microsoft.com/en-us/office/gcd-function-d5107a51-69e3-461f-8e4c-ddfc21b5073a; https://support.microsoft.com/en-us/office/lcm-function-7152b67a-8bb5-4075-ae5c-06ede5563c94"
      },
      "evidence": [
        {
          "commit": "9c23dde1dfd6d93e742d763a4bad3eaec229b29c",
          "locator": "recorded_gcd_lcm_admit_the_exact_operand_boundary",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GCD",
        "FUNC.LCM"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-GCD-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "GCD(9007199254740992, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x4340000000000000",
                "display": "9007199254740992",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111boundary-GCD-00190",
            "note": null,
            "path": "runs/w111-integer-publication-20260929/answers/answers-gcd.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "LCM(9007199254740992, 2)",
          "correct": null,
          "excel": {
            "bits": "0x4340000000000000",
            "display": "9007199254740992",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x4340000000000000",
                "display": "9007199254740992",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111boundary-LCM-00194",
            "note": null,
            "path": "runs/w111-integer-publication-20260929/answers/answers-lcm.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "GCD(9007199254740994, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x4340000000000001",
                "display": "9007199254740994",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111boundary-GCD-00217",
            "note": null,
            "path": "runs/w111-integer-publication-20260929/answers/answers-gcd.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "GCD accepts an operand equal to 2^53, and LCM accepts an operand or a result equal to 2^53. Only values above 2^53 give #NUM!.",
      "status": "measured",
      "title": "GCD and LCM accept 2^53 itself, not only values below it"
    },
    {
      "basis": "Two rows read directly from the landed regenerated W111 capture files. Both record Excel build 20430, Windows 64-bit, Compatibility Version 2 and exact-double bulk Value2 inputs, on 29 September 2026. The calls are to different functions in the same recorded environment class; this is not a comparison between builds and no fresh Excel calls were made.",
      "documentation": null,
      "evidence": [
        {
          "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
          "locator": "w111broad-20260929-GEOMEAN-00003",
          "note": "Recorded GEOMEAN(1,2) answer and capture provenance.",
          "path": "cache/w111-broad-regenerated-20260929/answers-geomean.json.gz",
          "repository": "CalcFunc-Evidence"
        },
        {
          "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
          "locator": "w111broad-20260929-SQRT-00014",
          "note": "Recorded SQRT(2) answer and capture provenance.",
          "path": "cache/w111-broad-regenerated-20260929/answers-sqrt.json.gz",
          "repository": "CalcFunc-Evidence"
        },
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "excel_root_x87",
          "note": "Current normalized LN, reciprocal and EXP root reconstruction.",
          "path": "crates/calc-func/src/ported/excel_numeric/x87_chains.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.GEOMEAN",
        "FUNC.SQRT"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-GEOMEAN-001",
      "open": [
        "Whether other inputs or environments retain the same difference; the two rows do not certify whole-function agreement or identify private Excel code."
      ],
      "recorded_on": "2026-11-06",
      "repros": [
        {
          "call": "GEOMEAN(1,2)",
          "correct": {
            "bits": "0x3ff6a09e667f3bcd",
            "display": "1.4142135623730951",
            "how": "Exact rational comparison: 2 lies strictly between the squares of the lower and upper binary64 midpoints around 0x3ff6a09e667f3bcd. Therefore that value is the nearest binary64 square root of 2.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff6a09e667f3bcc",
            "display": "1.414213562373095",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "w111broad-20260929-GEOMEAN-00003",
            "note": "Capture provenance records exact-double bulk Value2 cell input.",
            "path": "cache/w111-broad-regenerated-20260929/answers-geomean.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "SQRT(2)",
          "correct": null,
          "excel": {
            "bits": "0x3ff6a09e667f3bcd",
            "display": "1.4142135623730951",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "w111broad-20260929-SQRT-00014",
            "note": "Capture provenance records exact-double bulk Value2 cell input.",
            "path": "cache/w111-broad-regenerated-20260929/answers-sqrt.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In two retained build 20430 controls, GEOMEAN(1,2) returned 1.414213562373095 (0x3ff6a09e667f3bcc), while SQRT(2) returned 1.4142135623730951 (0x3ff6a09e667f3bcd). Both functions mathematically return the positive square root of two; the SQRT result is the nearest binary64 value. A fifteen-significant-digit display hides the difference.",
      "status": "measured",
      "title": "GEOMEAN(1,2) and SQRT(2) return adjacent values in retained build 20430 controls"
    },
    {
      "basis": "27 recorded readings in dynamic-array Excel, each with size observers.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "scalar_errors_keep_their_array_argument_origins",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets fn2_q001 to fn2_q007, fn2_q031 to fn2_q042, fn2_q232 to fn2_q239",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.BYCOL",
        "FUNC.BYROW",
        "FUNC.EXPAND",
        "FUNC.HSTACK",
        "FUNC.MAP",
        "FUNC.TAKE",
        "FUNC.TOCOL",
        "FUNC.TOROW",
        "FUNC.VSTACK"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-HSTACK-001",
      "open": [
        "Competing errors in later positions have not been read in a published capture."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=HSTACK(1,#VALUE!)",
          "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 fn2_q004, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TAKE(#N/A,0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 fn2_q232, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MAP(NA(),LAMBDA(xx,IFERROR(xx,3)))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 fn2_q031, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MAP({#N/A},LAMBDA(xx,3))",
          "correct": null,
          "excel": {
            "bits": "0x4008000000000000",
            "display": "3",
            "kind": "number"
          },
          "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 fn2_q032, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=HSTACK(Data!C1,{1;2})",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{#N/A,1;#N/A,2}",
            "kind": "array"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "Data!C1",
              "value": {
                "bits": null,
                "display": "#N/A",
                "kind": "error"
              }
            }
          ],
          "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 fn2_q238, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TOCOL(#N/A,2)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 fn2_q233, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TOCOL({#N/A},2)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "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 fn2_q234, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=EXPAND(Data!C1,2,2,\"pad\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "Data!C1",
              "value": {
                "bits": null,
                "display": "#N/A",
                "kind": "error"
              }
            }
          ],
          "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 fn2_q237, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=BYROW(#N/A,#VALUE!)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 fn2_q040, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=BYROW({#N/A},2)",
          "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 fn2_q038, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "An error written directly as an argument of these functions is the answer for the whole call. It is not placed in the result: HSTACK(1,#VALUE!) is #VALUE!, not a row holding 1 and an error, and TAKE(#N/A,0) is #N/A. With MAP the LAMBDA does not run at all: MAP(NA(),LAMBDA(xx,IFERROR(xx,3))) is #N/A. The same error inside an array, or in a referenced cell, is an ordinary element: MAP({#N/A},LAMBDA(xx,3)) is 3, and HSTACK(Data!C1,{1;2}) with #N/A in Data!C1 is a 2 by 2 array with #N/A in its first column. TOCOL and TOROW show the difference with ignore 2: TOCOL(#N/A,2) is #N/A, while TOCOL({#N/A},2) drops the error, has nothing left, and is #CALC!. EXPAND is an exception on the cell side: EXPAND(Data!C1,2,2,\"pad\") is #N/A for the whole call. BYROW and BYCOL check the direct error first too: BYROW(#N/A,#VALUE!) is #N/A, while BYROW({#N/A},2), where 2 is not a LAMBDA, is #VALUE!.",
      "status": "measured",
      "title": "A direct error stops these array functions; the same error in an array or cell is an element"
    },
    {
      "basis": "Read directly from four rows of the landed W111 domain capture. Its provenance names Excel build 20430, Windows 64-bit, Compatibility Version 2, exact-double bulk cell input and no cache. This harvest made no new Excel calls and did not compare builds.",
      "documentation": {
        "claim": "The opened HYPGEOM.DIST remarks specify #NUM! for a sample size or population success count at or below zero, and for sample successes above min(sample size,population successes).",
        "source": "https://support.microsoft.com/en-us/excel/functions/hypgeom-dist-function"
      },
      "evidence": [
        {
          "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
          "locator": "hypgeom.dist-domain-01118-integer-support, hypgeom.dist-domain-01119-integer-support, hypgeom.dist-domain-01404-integer-support, hypgeom.dist-domain-01405-integer-support",
          "note": "Recorded answers and capture provenance.",
          "path": "runs/w111-distribution-domain-20260929/answers-hypgeom.dist.json.gz",
          "repository": "CalcFunc-Evidence"
        },
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "hypergeom_mass and hypergeom_dist_kernel",
          "note": "Current support checks, degenerate masses and cumulative endpoint shortcut.",
          "path": "crates/calc-func/src/ported/discrete_dist.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.HYPGEOM.DIST"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-HYPGEOM.DIST-001",
      "open": [
        "Whether every out-of-support and zero-count combination follows the same rule in other builds."
      ],
      "recorded_on": "2026-11-06",
      "repros": [
        {
          "call": "HYPGEOM.DIST(0,0,0,5,0)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "sample_s",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "number_sample",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "population_s",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "number_pop",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "hypgeom.dist-domain-01118-integer-support",
            "note": "Original capture provenance records cell_value2_bulk input plumbing and no cache use.",
            "path": "runs/w111-distribution-domain-20260929/answers-hypgeom.dist.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "HYPGEOM.DIST(0,0,0,5,1)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "sample_s",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "number_sample",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "population_s",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "number_pop",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "hypgeom.dist-domain-01119-integer-support",
            "note": "Original capture provenance records cell_value2_bulk input plumbing and no cache use.",
            "path": "runs/w111-distribution-domain-20260929/answers-hypgeom.dist.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "HYPGEOM.DIST(5,4,2,5,0)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "sample_s",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "number_sample",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "population_s",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "number_pop",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "hypgeom.dist-domain-01404-integer-support",
            "note": "Original capture provenance records cell_value2_bulk input plumbing and no cache use.",
            "path": "runs/w111-distribution-domain-20260929/answers-hypgeom.dist.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "HYPGEOM.DIST(5,4,2,5,1)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "sample_s",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "number_sample",
              "value": {
                "bits": "0x4010000000000000",
                "display": "4",
                "kind": "number"
              }
            },
            {
              "name": "population_s",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "number_pop",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "cumulative",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit (NT 10.00), Workbook Compatibility Version 2; CPU not recorded. Captured 29 September 2026.",
          "source": {
            "commit": "4287ba192d2e3a7fd54671ea1cee1c34cb2e84e2",
            "locator": "hypgeom.dist-domain-01405-integer-support",
            "note": "Original capture provenance records cell_value2_bulk input plumbing and no cache use.",
            "path": "runs/w111-distribution-domain-20260929/answers-hypgeom.dist.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Four retained build 20430 controls return numeric values where the opened documentation specifies #NUM!: HYPGEOM.DIST(0,0,0,5,0) and its cumulative form both return 1; HYPGEOM.DIST(5,4,2,5,0) returns 0 and its cumulative form returns 1. These observations cover the listed inputs, not every out-of-support call.",
      "status": "measured",
      "title": "Recorded hypergeometric calls admit zero counts and counts above the support"
    },
    {
      "basis": "11 recorded selection readings in dynamic-array Excel, each with size observers.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "selection and callable readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets fn2_q016 to fn2_q022, fn2_q194, fn2_q195, fn2_q208, fn2_q209",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.IFS",
        "FUNC.SWITCH"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-IFS-001",
      "open": [
        "A selected LAMBDA that is then called, or passed through LET or IFERROR, has not been read in a published capture."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=IFS(TRUE,1,{FALSE,TRUE},{2,3})",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 fn2_q208, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=SWITCH(2,2,1,{1,2},3)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 fn2_q209, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=SWITCH(\"A\",\"a\",1,{\"A\",\"A\"},2)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 fn2_q016, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ISBLANK(IFS(TRUE,Data!Z1))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "Data!Z1",
              "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 fn2_q194, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ISBLANK(SWITCH(1,1,Data!Z1))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "Data!Z1",
              "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 fn2_q195, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IFS(TRUE,LAMBDA(xx,xx))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "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 fn2_q017, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=SWITCH(1,1,LAMBDA(xx,xx))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "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 fn2_q018, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IFS(TRUE,HSTACK(LAMBDA(xx,xx),LAMBDA(xx,xx)))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{#CALC!,#CALC!}",
            "kind": "array"
          },
          "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 fn2_q019, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IFS(\"2\",{\"hit\",\"hit\"})",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{#VALUE!,#VALUE!}",
            "kind": "array"
          },
          "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 fn2_q021, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=SWITCH(#VALUE!,1,{1,2},0)",
          "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 fn2_q022, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Once a scalar test selects a result, array arguments after it have no effect on the shape: IFS(TRUE,1,{FALSE,TRUE},{2,3}) and SWITCH(2,2,1,{1,2},3) each return one 1, not an array, and SWITCH(\"A\",\"a\",1,{\"A\",\"A\"},2) returns 1 because the match ignores case. The selected value itself is passed on as it is. A selected reference stays a reference: ISBLANK(IFS(TRUE,Data!Z1)) is TRUE over an empty cell. A selected LAMBDA shows as #CALC! in the cell, IFS(TRUE,LAMBDA(xx,xx)), and a selected array of LAMBDAs as #CALC! in each cell. A test that is not TRUE or FALSE gives #VALUE! in the shape of its result: IFS(\"2\",{\"hit\",\"hit\"}) is {#VALUE!,#VALUE!}. A direct error as the SWITCH expression stays one error: SWITCH(#VALUE!,1,{1,2},0) is #VALUE!.",
      "status": "measured",
      "title": "IFS and SWITCH pass on the selected value whole, and later arrays do not lift the call"
    },
    {
      "basis": "fv 0, type 0: IPMT 95 of 95 and PPMT 74 of 74 recorded rows, plus 64 of 64 fresh PPMT(r,1,1,pv) and PPMT(r,1,2,pv) readings. Nonzero fv, type 0: PPMT 25 of 27, IPMT 18 of 27. Over every recorded row in the evidence repository IPMT matches 48 of 57 and PPMT 26 of 33. Replaying the formulas in exact rational arithmetic, with exp and ln correctly rounded, gives all 12 PPMT and all 12 IPMT answers of the loan below.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "section UPDATE",
          "note": "research write-up",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "6c6cbd31c960fe1ac07d5cce9cb33ca9d7d86cf5",
          "locator": "end_payment_parts",
          "note": "the formulas in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/financial_time_value_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "6c6cbd31c960fe1ac07d5cce9cb33ca9d7d86cf5",
          "locator": "ipmt_and_ppmt_use_the_quotient_of_pmt",
          "note": "eight catalogue readings; failed before the change",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.IPMT",
        "FUNC.PPMT"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-IPMT-001",
      "open": [
        "Nonzero fv: PMT's open numerator of q carries through.",
        "type 1: PMT's open factor K carries through."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=IPMT(0.05/12,12,360,200000)",
          "correct": {
            "bits": "0xc089b0b1b69cc35e",
            "display": "-822.0867740866777",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc089b0b1b69cc35f",
            "display": "-822.0867740866778",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 750, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=PPMT(0.05/12,12,360,200000)",
          "correct": {
            "bits": "0xc06f71ce9e3ca452",
            "display": "-251.5564719376003",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc06f71ce9e3ca456",
            "display": "-251.5564719376004",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 749, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, take L and q from PMT (FN-PMT-001; with nonzero fv, q = RN(N/em) with an fv numerator that is open). For period k of nper with end-of-period payments, m = nper-k+1, t = -(m*L), em_m is the expm1 of t by the route in FN-PMT-001, and u = exp(t) stored. Then IPMT = -RN(RN(RN(q*em_m) - RN(fv*u))*rate) and PPMT = RN(RN(RN(q - fv)*u)*rate). Interest takes the Kahan expm1, and principal takes the exponential it starts from: 1+em_m fits 36 of 74 principal rows where u fits all 74. So neither answer is the payment less the other (FN-PPMT-001).",
      "status": "measured",
      "title": "IPMT and PPMT reuse PMT's quotient, one through expm1 and the other through exp"
    },
    {
      "basis": "40 recorded readings: seven direct non-numbers and NA() as values, each with five guesses (none, 0.1, \"x\", NA(), empty).",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets ql001 to ql040",
          "note": "40 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.IRR"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-IRR-001",
      "open": [
        "A reference to one cell holding the same values answers differently. Those readings are not in a published capture, so this note covers direct values only."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=IRR(\"2\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 ql006, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(TRUE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 ql026, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(\"2\",\"x\")",
          "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 ql008, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(\"2\",NA())",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql009, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(\"2\",)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 ql010, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(NA())",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql036, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=IRR(NA(),\"x\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql038, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Text or a logical typed directly as the values argument of IRR is not an error of type: \"\", \"2\", \"x\", \"0\", \"-2\", TRUE and FALSE all give #NUM!, never #VALUE!. The guess is read anyway, and its error wins: with any of those values, a guess of \"x\" gives #VALUE! and a guess of NA() gives #N/A, while 0.1 or an empty guess leaves #NUM!. A direct error in values wins over the guess: IRR(NA(),\"x\") is #N/A.",
      "status": "measured",
      "title": "IRR with a direct non-number gives #NUM!, and the guess is still checked"
    },
    {
      "basis": "Gains 11 recorded answers and loses none over the 3,944 regression rows of the corpus; 35 selections from two fits were checked directly.",
      "documentation": null,
      "evidence": [
        {
          "commit": "3f3b1622003f4f349a08ee8b054163e58f8dba67",
          "locator": "line 680",
          "note": "recorded selections pinned",
          "path": "crates/calc-func/tests/f1_stats.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "130ec21b3da03276c01fb27dce70463f08f90d9a",
          "locator": "reflector_study",
          "note": "research round 22 result",
          "path": "round22-result.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "130ec21b3da03276c01fb27dce70463f08f90d9a",
          "locator": null,
          "note": "reflector study",
          "path": "evidence/round22/householder-all-hard.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.LINEST",
        "FUNC.LOGEST"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-LINEST-001",
      "open": [
        "Norm, rank, mean, pivot and back-substitution policies are not identified. 48 fixed rank policies and 240 rounded Gram/LDL rank labels are contradicted by the 241 recorded degrees-of-freedom observations."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=INDEX(LINEST({-17.979;-0.126;8;-5;1.7;37;12.4;14.46;-8;24.2},{20.8,50;34,23.41;38.875,-17.7;4.863,36.9;42.1,6;-14.55,44.41;-4.57,-12.96;-9.909,2.589;47.549,42;54.9,-17.63},TRUE,TRUE),2,1)",
          "correct": null,
          "excel": {
            "bits": "0x3fc863a97e13b089",
            "display": "0.19054144531344644",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_linest_stats, row 1094, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_linest_stats.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In Excel's QR route the reflector arithmetic behaves as stored precision-64 steps: v0 = x0 - alpha, v'v, each dot-product term, f = 2t/v'v, and a - f*v. With this change the row below gets Excel's last bits, where a plain binary64 reflector does not.",
      "status": "measured",
      "title": "LINEST's Householder reflector stores each step from the x87 unit"
    },
    {
      "basis": "One fit, 20 selections read through INDEX.",
      "documentation": null,
      "evidence": [
        {
          "commit": "db713147318f63906d67ce88be497b66f521951d",
          "locator": "line 725",
          "note": "recorded selections pinned",
          "path": "crates/calc-func/tests/f1_stats.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.LINEST"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-LINEST-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=INDEX(LINEST({31.78;5.61;-9.09},{53.56,30.22,32;-9,-17.977,47.17;9.4,-11.83,39.39},FALSE,TRUE),2,1)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_linest_stats, row 1180, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_linest_stats.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=INDEX(LINEST({31.78;5.61;-9.09},{53.56,30.22,32;-9,-17.977,47.17;9.4,-11.83,39.39},FALSE,TRUE),3,1)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_linest_stats, row 1184, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_linest_stats.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=INDEX(LINEST({31.78;5.61;-9.09},{53.56,30.22,32;-9,-17.977,47.17;9.4,-11.83,39.39},FALSE,TRUE),4,1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_linest_stats, row 1188, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_linest_stats.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=INDEX(LINEST({31.78;5.61;-9.09},{53.56,30.22,32;-9,-17.977,47.17;9.4,-11.83,39.39},FALSE,TRUE),5,1)",
          "correct": null,
          "excel": {
            "bits": "0x409190463f141206",
            "display": "1124.0686",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_linest_stats, row 1192, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_linest_stats.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With three observations, three x columns and const FALSE, LINEST with stats returns standard errors of 0 and se_y of 0 rather than #DIV/0!, R^2 of 1, F of #NUM!, degrees of freedom 0, ss_resid exactly 0 and ss_reg the sum of y^2.",
      "status": "measured",
      "title": "LINEST with no residual degrees of freedom returns zeros and one #NUM!"
    },
    {
      "basis": "6 recorded LOWER and 4 recorded PROPER readings, in a workbook at compatibility version 2.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ae13ca181bc1d5e3c9e266f26a856ba634707d8e",
          "locator": null,
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "6 recorded readings",
          "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "4 recorded readings",
          "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.LOWER",
        "FUNC.PROPER"
      ],
      "inferred": "The readings cover one Deseret letter and two combining marks. That every letter above U+FFFF and every mark behave the same is inferred.",
      "kind": "quirk",
      "note_id": "FN-LOWER-001",
      "open": [
        "Behaviour at compatibility version 1 has not been read for these inputs."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "𐐀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "𐐀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-001",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "a𐐀ς",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "A𐐀Σ",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-003",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ασ̀",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ̀",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-004",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "LOWER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "ας.",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ΑΣ.",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-lower-005",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/LOWER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "PROPER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "A𐐀B",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "a𐐀b",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-proper-002",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "PROPER(A1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "Aσ́",
            "kind": "text"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "aΣ́",
                "kind": "text"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-proper-004",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/PROPER.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "LOWER did not change the Deseret capital U+10400, a cased letter above U+FFFF, either alone or inside other text: LOWER(\"A𐐀Σ\") is \"a𐐀ς\", where the Greek capital sigma at the end becomes the final form. Greek sigma depends on what follows: followed by a full stop it takes the final form ς, and followed by a combining mark, U+0300 or U+0301, it takes the medial form σ. PROPER treats a character above U+FFFF as a word boundary, so PROPER(\"a𐐀b\") is \"A𐐀B\", with the B capitalised and the Deseret letter unchanged.",
      "status": "measured",
      "title": "LOWER leaves letters above U+FFFF alone, and a combining mark stops the final sigma"
    },
    {
      "basis": "All 152,432 recorded MOD rows match, 4,974 of them rows the ordinary step misses, and so do 1,128 new Excel readings (build 20527). Those readings overturned an earlier test on power-of-two divisors: 1E-296 behaves like a power of two and 1E-300 does not.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.MOD"
      ],
      "inferred": "The rule is what is measured. Reading it as Veltkamp's split, the parts of a Dekker product of the count and the divisor, is an interpretation: a table over exponent and trailing zeros puts the boundary between exponents -1000 and -990 and at about 27 trailing zeros.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-MOD-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "MOD(-1.223247290044572e-296, 1.223247290044539e-296)",
          "correct": {
            "bits": "0x027fffffffffff0e",
            "display": "1.2232472900445062e-296",
            "how": "MOD(n,d) = n - d*INT(n/d) in exact rational arithmetic; the result is exactly representable.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0280000000000079",
            "display": "1.223247290044572e-296",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8280000000000079",
                "display": "-1.223247290044572e-296",
                "kind": "number"
              }
            },
            {
              "name": "divisor",
              "value": {
                "bits": "0x0280000000000000",
                "display": "1.223247290044539e-296",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111mod-tiny-discriminator-00960",
            "note": null,
            "path": "runs/w111-mod-tiny-discriminator-20260929/answers-mod.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "MOD(1.223247290044539e-296, -1.2232472900445716e-296)",
          "correct": {
            "bits": "0x80003c0000000000",
            "display": "-3.25938553492266e-310",
            "how": "MOD(n,d) = n - d*INT(n/d) in exact rational arithmetic; the result is exactly representable.",
            "kind": "number"
          },
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0280000000000000",
                "display": "1.223247290044539e-296",
                "kind": "number"
              }
            },
            {
              "name": "divisor",
              "value": {
                "bits": "0x8280000000000078",
                "display": "-1.2232472900445716e-296",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111mod-tiny-discriminator-00959",
            "note": null,
            "path": "runs/w111-mod-tiny-discriminator-20260929/answers-mod.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "MOD(n,d) takes the exact remainder r of n by d and adds d when their signs differ. Three things change when r is subnormal and its sign differs from d's. The result is #NUM! when |n/d| is 2^26 or more, or when d's low part under a Veltkamp split at 2^27 + 1 is subnormal. Otherwise, when |r| is below 2^-1026, the result is |d| + |r| with d's sign: the remainder is added where it should be taken away. A larger r takes the ordinary step. Any subnormal final result is #NUM!. So MOD(-(1+121*2^-52)*2^-983, 2^-983) returns +(1+121*2^-52)*2^-983, and MOD(2^-983, -(1+120*2^-52)*2^-983) returns #NUM!, where the exact answers are ordinary numbers.",
      "status": "measured",
      "title": "MOD with tiny operands gives wrong signs and #NUM!, by a rule that fits every recorded row"
    },
    {
      "basis": "30 recorded formula readings across the three functions, and 21 readings each of MODE and MODE.SNGL covering direct text, logicals and errors.",
      "documentation": {
        "claim": "Arguments that are error values or text that can't be translated into numbers cause errors.",
        "source": "https://support.microsoft.com/en-us/office/mode-function-e45192ce-9122-4980-82ed-4bdc34973120"
      },
      "evidence": [
        {
          "commit": "c5defbd38b292450d7baf6f4bb1e81b9f2fc91bc",
          "locator": "delivered_fn4_mode_ignores_text_and_logicals",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets ql104 to ql133",
          "note": "30 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "21 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/MODE.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "21 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/MODE.SNGL.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.MODE",
        "FUNC.MODE.MULT",
        "FUNC.MODE.SNGL"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-MODE-001",
      "open": [
        "How a reference to one empty cell counts is not settled by these readings."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=MODE(\"2\",2)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql111, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MODE(TRUE,1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql112, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MODE(\"x\",2,2)",
          "correct": null,
          "excel": {
            "bits": "0x4000000000000000",
            "display": "2",
            "kind": "number"
          },
          "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 ql110, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MODE(\"x\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "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 ql105, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MODE.SNGL(\"x\",2,2)",
          "correct": null,
          "excel": {
            "bits": "0x4000000000000000",
            "display": "2",
            "kind": "number"
          },
          "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 ql120, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MODE.MULT(\"x\",2,2)",
          "correct": null,
          "excel": {
            "bits": "0x4000000000000000",
            "display": "2",
            "kind": "number"
          },
          "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 ql130, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "MODE(2, 2, A3)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#DIV/0!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "number3",
              "value": {
                "bits": null,
                "display": "#DIV/0!",
                "kind": "error"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-MODE-error-after-duplicates",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/MODE.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "MODE, MODE.SNGL and MODE.MULT take only numbers from their arguments, even when text or a logical is typed directly into the call. A direct \"2\" or TRUE is not converted, so MODE(\"2\",2) and MODE(TRUE,1) are #N/A: one number, no repeat. Text that is not a number gives no error either: MODE(\"x\",2,2) is 2, and MODE(\"x\") is #N/A. Error values do come through: MODE(2,2,A3) with #DIV/0! in A3 is #DIV/0!, and of two errors the first is returned.",
      "status": "measured",
      "title": "MODE ignores direct text and logicals instead of converting them or giving an error"
    },
    {
      "basis": "All 50,782 recorded MROUND rows match this rule. The cut-off lies between the adjacent binary64 values 4.996E-15 (rounded up) and 5.0515E-15 (rounded down) from 0.5, measured at floor(q) = 0 over 4,264 rows.",
      "documentation": {
        "claim": "MROUND rounds up, away from zero, if the remainder of dividing number by multiple is greater than or equal to half the value of multiple.",
        "source": "https://support.microsoft.com/en-us/office/mround-function-c299c3b0-15a5-426d-aa4b-d2d5b3baf427"
      },
      "evidence": [
        {
          "commit": "77873410e3b5b659e3ab1c808a7926dd9f36c5ea",
          "locator": "rounding_family_matches_recorded_bank_rows",
          "note": "ROUND family rules in the product; failed before the change",
          "path": "crates/calc-func/tests/f1_math.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.MROUND"
      ],
      "inferred": "The window is measured between two neighbouring values; that the constant is the decimal 5E-15 is inferred, as the decimal in that window.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-MROUND-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "MROUND(0.499999999999995, 1)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "The number is nearer to 0 than to 1.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3fdfffffffffffa6",
                "display": "0.499999999999995",
                "kind": "number"
              }
            },
            {
              "name": "multiple",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "mround-fraction-cutoff-00181",
            "note": null,
            "path": "runs/w111-mround-fraction-cutoff-20260929/answers-mround.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "MROUND(0.49999999999999495, 1)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3fdfffffffffffa5",
                "display": "0.49999999999999495",
                "kind": "number"
              }
            },
            {
              "name": "multiple",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "mround-fraction-cutoff-00183",
            "note": null,
            "path": "runs/w111-mround-fraction-cutoff-20260929/answers-mround.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "MROUND(0.49999999999999994, 1)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "The number is nearer to 0 than to 1.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3fdfffffffffffff",
                "display": "0.49999999999999994",
                "kind": "number"
              }
            },
            {
              "name": "multiple",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "mround-fraction-cutoff-00003",
            "note": null,
            "path": "runs/w111-mround-fraction-cutoff-20260929/answers-mround.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "MROUND(n,m) forms q = n/m on the x87 unit and stores it to binary64, counts floor(q), adds 1 when 0.5 - frac(q) <= 5E-15, and returns count*m from the x87 unit. A number just below a half therefore rounds up though it is nearer the lower multiple: 0.499999999999995 with multiple 1 gives 1, and the next binary64 below it gives 0. MROUND(6.05,0.1) stays 6, because its quotient 60.49999999999999 lies 7.1E-15 below the half.",
      "status": "measured",
      "title": "MROUND counts a quotient within 5E-15 below a half up"
    },
    {
      "basis": "19 NETWORKDAYS.INTL and 20 WORKDAY.INTL readings with errors held in cells, and the logical weekend readings of the argument sheets.",
      "documentation": null,
      "evidence": [
        {
          "commit": "287c5b9a3bec81ea96f12ad485f18a0d4b729063",
          "locator": "delivered_scalar_readings_follow_the_application_route",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "19 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/NETWORKDAYS.INTL.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "20 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/WORKDAY.INTL.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.NETWORKDAYS.INTL",
        "FUNC.WORKDAY.INTL"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-NETWORKDAYS.INTL-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "NETWORKDAYS.INTL(A1, 5, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": null,
                "display": "#REF!",
                "kind": "error"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "weekend",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-NETWORKDAYS.INTL-weekend-first-order-2",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/NETWORKDAYS.INTL.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "WORKDAY.INTL(A1, 5, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#REF!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": null,
                "display": "#REF!",
                "kind": "error"
              }
            },
            {
              "name": "days",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "weekend",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-WORKDAY.INTL-weekend-first-order-2",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/WORKDAY.INTL.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "NETWORKDAYS.INTL(2, 5, A3)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "weekend",
              "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-NETWORKDAYS.INTL-admission-order-6",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/NETWORKDAYS.INTL.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "WORKDAY.INTL(2, 5, A3)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            },
            {
              "name": "days",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "weekend",
              "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-WORKDAY.INTL-admission-order-6",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/WORKDAY.INTL.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=NETWORKDAYS.INTL(2,5,TRUE)",
          "correct": null,
          "excel": {
            "bits": "0x4010000000000000",
            "display": "4",
            "kind": "number"
          },
          "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 qa043, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=NETWORKDAYS.INTL(2,5,FALSE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 qa044, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=WORKDAY.INTL(2,2,TRUE)",
          "correct": null,
          "excel": {
            "bits": "0x4010000000000000",
            "display": "4",
            "kind": "number"
          },
          "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 qa065, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=WORKDAY.INTL(2,2,FALSE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "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 qa066, 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": "The two functions read their arguments in different orders. NETWORKDAYS.INTL decodes weekend first: with #REF! in the cell for start_date and weekend 0, the answer is #NUM!, from the invalid weekend. WORKDAY.INTL reads start_date first and gives #REF! for the same arguments. An error held in the weekend cell is also treated differently: with start 2 and second argument 5, NETWORKDAYS.INTL gives #VALUE! and WORKDAY.INTL gives #NUM!. Neither returns the error itself. A logical weekend is read as a number: NETWORKDAYS.INTL(2,5,TRUE) is 4, as with weekend 1, and FALSE is #NUM!, as with weekend 0. WORKDAY.INTL does the same.",
      "status": "measured",
      "title": "NETWORKDAYS.INTL checks weekend before the dates, WORKDAY.INTL after them"
    },
    {
      "basis": "32 recorded readings on one collation sheet.",
      "documentation": null,
      "evidence": [
        {
          "commit": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
          "locator": "sheet fn3_collation, rows 290 to 321",
          "note": null,
          "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.OP_EQUAL",
        "FUNC.OP_LESS_THAN"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-OP_EQUAL-001",
      "open": [
        "Twelve further comparisons (other leading consonants, a trailing consonant, a compound vowel, compatibility jamo) were read on 2026-11-04. They are not yet in a published capture, so this note does not rest on them."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=\"가\"=\"가\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "FALSE",
            "kind": "logical"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_collation, row 290, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"가\"<\"가\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_collation, row 291, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"각\"=\"각\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "FALSE",
            "kind": "logical"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_collation, row 296, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "U+1100 U+1161 is canonically equivalent to the syllable U+AC00 in Unicode, but Excel's comparison says they are not equal, and the jamo sequence sorts first. The same holds with a final consonant, U+1100 U+1161 U+11A8 against U+AC01.",
      "status": "measured",
      "title": "Conjoining Hangul jamo do not compare equal to the precomposed syllable"
    },
    {
      "basis": "66 recorded readings of =, < and > on 22 pairs of strings, 11 pairs after 時 and 11 after a.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets q001 to q066",
          "note": "66 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.OP_GREATER_THAN",
        "FUNC.OP_LESS_THAN"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-OP_LESS_THAN-001",
      "open": [
        "The collation rule behind this is not identified, and none is claimed here."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=\"a-ゝx\"<\"aゝx\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q059, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"a-ゝx\">\"aゝx\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "FALSE",
            "kind": "logical"
          },
          "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 q060, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"時-ゝx\"<\"時ゝx\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "FALSE",
            "kind": "logical"
          },
          "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 q050, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"時-ゝx\">\"時ゝx\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q051, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"a−ゝ\"<\"aゝ\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q029, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"時−ゝ\">\"時ゝ\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q006, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"a−ゝ\">\"a−\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q027, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"時−ゝ\">\"時−\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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 q003, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Comparing a string with punctuation before a repeat or prolonged-sound mark against the same string without the punctuation, the order depends on the character at the start. After a Latin letter the punctuated string is smaller: \"a-ゝx\" < \"aゝx\". After a Han character it is larger: \"時-ゝx\" > \"時ゝx\". This held for every pair read, with the marks ゝ, 々 and ー and with hyphen-minus, U+2212 and U+2019 as the punctuation. In all 66 readings the two strings are never equal, and a string with the mark added sorts after the string without it, after Latin and after Han alike: \"a−ゝ\" > \"a−\".",
      "status": "measured",
      "title": "Punctuation before a Japanese repeat mark sorts one way after a Latin letter, the other after Han"
    },
    {
      "basis": "Two formula-literal rows in the landed statistics capture. Raw and reopened binary64 results agree, and the saved numeric text parses to those values. The first interpolated mathematical rank is about 0.0813559322; the second is 1/12. Six and three significant digits would retain 0.0813559 and 0.0833, respectively. This harvest made no new Excel calls.",
      "documentation": {
        "claim": "The opened PERCENTRANK and PERCENTRANK.INC pages describe significance as the number of significant digits; omission defaults to three.",
        "source": "https://support.microsoft.com/en-us/excel/functions/percentrank-function; https://support.microsoft.com/en-us/excel/functions/percentrank-inc-function"
      },
      "evidence": [
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "sheet dcj9k_statistics, rows 933 and 1028, column 4",
          "note": "Formula-literal answers and full environment, with raw/saved/reopened views.",
          "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_statistics.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "da3ecc4fb19a3a5529708c311d0e8f05688ac165",
          "locator": "truncate_to_decimal_places",
          "note": "Current decimal-place truncation and its stated recorded scope.",
          "path": "crates/calc-func/src/ported/percentrank_common.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.PERCENTRANK",
        "FUNC.PERCENTRANK.INC"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-PERCENTRANK-001",
      "open": [
        "These two controls do not establish all duplicate-selection, significance-limit or cross-build behaviour. PERCENTRANK.EXC shares the current helper but is not a measured precision discriminator in this note."
      ],
      "recorded_on": "2026-11-06",
      "repros": [
        {
          "call": "=PERCENTRANK({37.15,46,54},38.59,6)",
          "correct": null,
          "excel": {
            "bits": "0x3fb4d3ae685db76b",
            "display": "0.081355",
            "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 dcj9k_statistics, row 933, column 4; formulas, observations, saved and reopened",
            "note": "One capture with three retained views, not three independent runs.",
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_statistics.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=PERCENTRANK.INC({0,1,2,3,4,5,6,7,8,9,10,11,12},1)",
          "correct": null,
          "excel": {
            "bits": "0x3fb53f7ced916873",
            "display": "0.083",
            "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 dcj9k_statistics, row 1028, column 4; formulas, observations, saved and reopened",
            "note": "One capture with three retained views, not three independent runs.",
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_statistics.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In the retained catalogue capture, PERCENTRANK({37.15,46,54},38.59,6) returns 0.081355, and PERCENTRANK.INC({0,1,2,3,4,5,6,7,8,9,10,11,12},1) returns 0.083 with omitted significance. These results retain six and three decimal places respectively, and differ from keeping that many significant digits in the untruncated ranks. The scope is these two build 20527 calls.",
      "status": "measured",
      "title": "Two percent-rank controls retain decimal places rather than significant digits"
    },
    {
      "basis": "For each of 1,184 rates one binary64 L reproduces Excel's em at every nper (1,622 of 1,622 power-of-two and 1,849 of 1,849 other nper, L taken from nper 1 alone). The series gives that L at 1,181 rates; the correctly rounded log1p and fdlibm's log1p each give it at 667. Order and precision of the last two steps: in all 4,802 groups of recorded answers sharing (rate, nper) with 8 or more pv values, these steps admit one em; a binary64 quotient leaves 59 groups with none, and binary64 for both steps 111. 720 of 720 fresh type 0 rows over 20 rates, both signs, match (Excel build 20527). Over every recorded PMT row, types and fv included, 279,887 of 291,978 match.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "section UPDATE",
          "note": "research write-up; the update supersedes the blocked outcome at its head",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "08ea3d7ae0ba8d7241e2545aeeb78ff246ac6963",
          "locator": "pmt",
          "note": "the logarithm and the stored quotient in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/financial_time_value_family.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "08ea3d7ae0ba8d7241e2545aeeb78ff246ac6963",
          "locator": "excel_log1p_atanh",
          "note": "the series",
          "path": "crates/calc-func/src/ported/excel_numeric/mod.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
          "locator": null,
          "note": "recorded answers of the 30-year loan block",
          "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.PMT"
      ],
      "inferred": "The range -1/3 to 1/2 is where twelve series terms converge, not a measured Excel boundary. Rate 0.419, near sqrt(2)-1, misses by 1 unit, so a range reduction may start there. Negative rates rest on 20 rates' controls and the recorded rows.",
      "kind": "bit-matching-detail",
      "note_id": "FN-PMT-001",
      "open": [
        "type 1: Excel multiplies q by one stored binary64 K near rate/(1+rate) per rate (pinned at all but one of about 458 recorded rates and at 20 of 20 fresh ones), but K's formula is open: the correctly rounded quotient fits 344 of 458.",
        "Nonzero fv: the numerator of q is open. The best form tried fits 5,600 of 7,491 rows, and 146 rows admit no binary64 numerator under this order.",
        "Rates outside -1/3 to 1/2."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=PMT(0.05/12,360,200000)",
          "correct": {
            "bits": "0xc090c692af15f639",
            "display": "-1073.643246024278",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc090c692af15f63a",
            "display": "-1073.6432460242781",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 726, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, PMT with fv 0 and type 0 at rates from -1/3 to 1/2 runs: s = rate/(2+rate); L = 2s + 2s*(s^2*T), where T = 1/3 + s^2/5 + ... + s^20/23 by Horner, all in plain binary64, which is the atanh series for ln(1+rate) (Abramowitz and Stegun 4.1.27) with the 2s term added last; t = -(nper*L); u = exp(t) stored; em = RN(RN(RN(u-1)*t)/ln(u)) for |t| < 1, and RN(u-1) otherwise, Kahan's way of forming expm1; q = RN(pv/em); PMT = RN(q*rate). L is not the correctly rounded logarithm: at rate 0.05/12 it is 0x3f7107fd59addc8a, one unit below 0x3f7107fd59addc8b, and the common 30-year loan below comes out 1 unit from the correctly rounded payment.",
      "status": "measured",
      "title": "PMT takes ln(1+rate) from a series, and stores its quotient before the rate"
    },
    {
      "basis": "Twelve recorded periods of one loan, read from the catalogue capture, compared with exact values and with Excel's own PMT and IPMT by binary64 subtraction, recomputed for this note.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up; finding F4 gives 4 and 8 of 12 periods, and the capture gives the 2 and 7 stated here",
          "path": "content/notes/evidence/2026-11-04/annuity-EVIDENCE.txt",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
          "locator": null,
          "note": "recorded answers of the 30-year loan block",
          "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.PMT",
        "FUNC.PPMT"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-PPMT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=PPMT(0.05/12,1,360,200000)",
          "correct": {
            "bits": "0xc06e09eace05071f",
            "display": "-240.30991269094463",
            "how": "mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc06e09eace050723",
            "display": "-240.30991269094474",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_annuity, row 727, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_annuity.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "On the 30-year loan PPMT(0.05/12,k,360,200000), for k from 1 to 12 every PPMT answer is 3 to 5 units above the correctly rounded principal payment, while PMT is 1 unit away. Excel's own answers do not satisfy the identity: in binary64, PMT - IPMT equals PPMT in 2 of the 12 periods and PMT - PPMT equals IPMT in 7. So reproducing PPMT from PMT and IPMT misses the last bits. FN-IPMT-001 gives the route Excel takes instead.",
      "status": "measured",
      "title": "PPMT is not PMT minus IPMT, and sits further from the exact value than PMT"
    },
    {
      "basis": "2,404 of 2,404 recorded rows, with the day counts of FN-PRICEMAT-002. Strict binary64 with the same day counts matches 2,400.",
      "documentation": null,
      "evidence": [
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 435-466",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "counts",
          "note": "day-count rule against precision",
          "path": "evidence/round23/pricemat-hard/summary.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.PRICEMAT"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-PRICEMAT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "PRICEMAT(38620, 42889, 38168, 0.12180991686638161, 0.019384437069992936, 2)",
          "correct": null,
          "excel": {
            "bits": "0x40687ccaf6a4a5ee",
            "display": "195.89977581174702",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e2db8000000000",
                "display": "38620",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e4f12000000000",
                "display": "42889",
                "kind": "number"
              }
            },
            {
              "name": "issue",
              "value": {
                "bits": "0x40e2a30000000000",
                "display": "38168",
                "kind": "number"
              }
            },
            {
              "name": "rate",
              "value": {
                "bits": "0x3fbf2eef494503b5",
                "display": "0.12180991686638161",
                "kind": "number"
              }
            },
            {
              "name": "yld",
              "value": {
                "bits": "0x3f93d9838d1165c1",
                "display": "0.019384437069992936",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 2282, key PRICEMAT|0x40e2db8000000000|0x40e4f12000000000|0x40e2a30000000000|0x3fbf2eef494503b5|0x3f93d9838d1165c1|0x4000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/PRICEMAT.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "PRICEMAT = (100 + (DIM/B)*rate*100) / (1 + (DSM/B)*yld) - (A/B)*rate*100, each operation taken from the x87 unit at precision 64 and stored to binary64.",
      "status": "measured",
      "title": "PRICEMAT formula order on the x87 unit"
    },
    {
      "basis": "One recorded row separates this rule from the standard one: 2,404 of 2,404 against 2,403.",
      "documentation": null,
      "evidence": [
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "counts",
          "note": "day-count rule against precision",
          "path": "evidence/round23/pricemat-hard/summary.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 435-466",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.PRICEMAT"
      ],
      "inferred": "The order of the two tests is taken from the published ExcelFinancialFunctions getMatFactors rule, which fits; one row cannot pin it alone.",
      "kind": "quirk",
      "note_id": "FN-PRICEMAT-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "PRICEMAT(46376, 52321, 45716, 0.04392789506562811, 0.03266239139487676, 0)",
          "correct": null,
          "excel": {
            "bits": "0x405b4e18ab31a7da",
            "display": "109.22025565957247",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e6a50000000000",
                "display": "46376",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e98c2000000000",
                "display": "52321",
                "kind": "number"
              }
            },
            {
              "name": "issue",
              "value": {
                "bits": "0x40e6528000000000",
                "display": "45716",
                "kind": "number"
              }
            },
            {
              "name": "rate",
              "value": {
                "bits": "0x3fa67db79160c3a0",
                "display": "0.04392789506562811",
                "kind": "number"
              }
            },
            {
              "name": "yld",
              "value": {
                "bits": "0x3fa0b91ffdb34689",
                "display": "0.03266239139487676",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1455, key PRICEMAT|0x40e6a50000000000|0x40e98c2000000000|0x40e6528000000000|0x3fa67db79160c3a0|0x3fa0b91ffdb34689|0x0000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/PRICEMAT.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "For basis 0, PRICEMAT tests \"end on the 31st gives 30\" before \"start on the last day of February gives 30\"; the US (NASD) 30/360 rule applies the February adjustment first. An issue on 28 February 2025 and maturity on 31 March 2043 gives DIM 6511, not 6510, and moves the price at about 1E-5 relative.",
      "status": "measured",
      "title": "PRICEMAT basis 0 applies the 31st rule before the February rule"
    },
    {
      "basis": "12 recorded REGEXTEST readings, in a workbook at compatibility version 2.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ae13ca181bc1d5e3c9e266f26a856ba634707d8e",
          "locator": null,
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "12 recorded readings",
          "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.REGEXTEST"
      ],
      "inferred": "The readings cover the characters named here. That \\w follows the Unicode Mn and Pc categories in general, and that ranges fold by simple case folding in general, is inferred.",
      "kind": "quirk",
      "note_id": "FN-REGEXTEST-001",
      "open": [
        "Reversed or very wide caseless ranges, and other newline characters, have not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "REGEXTEST(A1, A2, 1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "É",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "[é-é]",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-001",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "Σ",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "[α-ω]",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-003",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "́",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "\\w",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-005",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "‿",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "\\w",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-006",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 0)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "FALSE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "a, CR (U+000D), b",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "a.b",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-007",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "K",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "k",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-009",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "REGEXTEST(A1, A2, 1)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "text",
              "value": {
                "bits": null,
                "display": "ſ",
                "kind": "text"
              }
            },
            {
              "name": "pattern",
              "value": {
                "bits": null,
                "display": "s",
                "kind": "text"
              }
            },
            {
              "name": "case_sensitivity",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows 64-bit, AMD Ryzen 7 4800H, workbook compatibility version 2",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn3-regextest-010",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/REGEXTEST.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Some regular expression details in REGEXTEST differ from a plain reading. \\w matches a combining mark (U+0301) and connector punctuation (U+203F), so it is not limited to letters, digits and underscore. Dot does not match CR as well as LF: REGEXTEST(\"a\"&CHAR(13)&\"b\",\"a.b\") is FALSE. \\d does not match a Han character. With case_sensitivity 1, folding applies inside a character class range: É matches [é-é] and Σ matches [α-ω]. It also covers the non-ASCII partners of ASCII letters: the Kelvin sign U+212A matches k and long s U+017F matches s. ß matches its capital U+1E9E, and a Deseret letter above U+FFFF matches its other case.",
      "status": "measured",
      "title": "In REGEXTEST, \\w takes combining marks, dot refuses CR, and case folding reaches into ranges"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up. The wrap boundary was read at every decimal exponent in the recorded rows.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUND(-112500000000000, 2147483635)",
          "correct": {
            "bits": "0xc2d9945ca2620000",
            "display": "-112500000000000",
            "how": "-112500000000000 is an integer, so rounding it to any non-negative number of places returns it.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xc2d9945ca2620000",
                "display": "-112500000000000",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x41dffffffcc00000",
                "display": "2147483635",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUND-01694",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-round.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUND(-112500000000000, 2147483617)",
          "correct": null,
          "excel": {
            "bits": "0xc2d9945ca2620000",
            "display": "-112500000000000",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xc2d9945ca2620000",
                "display": "-112500000000000",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x41dffffff8400000",
                "display": "2147483617",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUND-01682",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-round.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUND cuts num_digits toward zero to a 32-bit integer D, limited to +/-2147483647, and keeps k = D + e + 1 significant digits, where e is the decimal exponent of |number| and the sum is computed in 32 bits. k of 15 or more keeps the 15-digit reading of the number; k below 0 gives 0. A large positive num_digits therefore wraps to no digits at all: for a number near 1.1E14, 2147483617 returns the number and 2147483635 returns 0. The boundaries move by exactly -e on both the +2^31 and -2^31 sides, for e from -308 to 308. num_digits of 2^31 or more acts as +2147483647 and -2^31 or less as -2147483647.",
      "status": "measured",
      "title": "ROUND counts digits in 32 bits, and the count wraps"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND",
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-002",
      "open": [
        "How the scale is formed for |n| > 27: a single correctly rounded 64-bit power and the chained multiplications tried do not fit; 123 ROUND, 548 ROUNDUP, 556 ROUNDDOWN and 555 TRUNC rows remain.",
        "The reading step itself: one control at n = -10 misses the single RN64 step by just over half a unit, so that step is an approximation of the real one even for |n| <= 27. It stays because it gains rows and loses none."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUND(-1594628480062905, 14)",
          "correct": {
            "bits": "0xc316a939806956e4",
            "display": "-1594628480062905",
            "how": "An integer rounded to 14 places is itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xc316a939806956d0",
            "display": "-1594628480062900",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xc316a939806956e4",
                "display": "-1594628480062905",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x402c000000000000",
                "display": "14",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 3758, key ROUND|0xc316a939806956e4|0x402c000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUND.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDDOWN(283025097725723.5, 0)",
          "correct": {
            "bits": "0x42f0168ea69971b0",
            "display": "283025097725723",
            "how": "ROUNDDOWN drops the fraction .5.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x42f0168ea69971c0",
            "display": "283025097725724",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x42f0168ea69971b8",
                "display": "283025097725723.5",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 753, key ROUNDDOWN|0x42f0168ea69971b8|0x0000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDDOWN.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Before choosing a digit these functions read the number to 15 significant digits on the x87 unit: with e the decimal exponent and n = 14 - e, y = RN64(|x| * 10^n), or RN64(|x| / 10^-n) when n is negative, while 10^|n| is exact in 64 bits (|n| <= 27). A half in y goes up for ROUNDDOWN, ROUNDUP and TRUNC and down for ROUND. So digits beyond the 15th are lost even when the requested precision keeps them: ROUND(-1594628480062905,14) loses its last digit, and ROUNDDOWN(283025097725723.5,0) returns 283025097725724, larger than its input.",
      "status": "measured",
      "title": "The rounding functions read 15 digits first, so ROUNDDOWN can round up"
    },
    {
      "basis": "One Excel workbook read cell by cell through Value2 on 2026-11-04, saved, reopened and recalculated; rows from the rounding write-up, 627 of 627.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": "cells A1..A4, B1..B24, reopened, recalculated",
          "note": "cell-by-cell Excel reading of the NaN patterns",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "the script that took the reading",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream.ps1",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "the sheet as Excel saved it",
          "path": "content/notes/evidence/2026-11-04/round-nan-downstream-sheet1.xml",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND",
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": "That one decimal-to-binary conversion routine is the source of all these patterns is inferred from the exponent-overflow encoding.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-003",
      "open": [
        "How these patterns sort among themselves and with other numbers, and display width, are not recorded."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUND(1.7976931348623157E+308, 0)",
          "correct": {
            "bits": "0x7fefffffffffffff",
            "display": "1.7976931348623157e+308",
            "how": "DBL_MAX is an integer, so rounding it to 0 places returns it.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x7ff000000000000a",
            "display": "NaN bit pattern, shown as 1.8E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A3",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "ROUND(1.7976931348623157E+308, -307)",
          "correct": {
            "bits": null,
            "display": "#NUM!",
            "how": "The rounded value exceeds the largest binary64; Excel reports overflow in its own arithmetic as #NUM!.",
            "kind": "error"
          },
          "excel": {
            "bits": "0x7ff005419221015d",
            "display": "NaN bit pattern, shown as 1.8E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0xc073300000000000",
                "display": "-307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A2",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        },
        {
          "call": "ROUND(1.7976931348623157E+308, -308)",
          "correct": {
            "bits": null,
            "display": "#NUM!",
            "how": "The rounded value exceeds the largest binary64; Excel reports overflow in its own arithmetic as #NUM!.",
            "kind": "error"
          },
          "excel": {
            "bits": "0x7ff1ccf385ebc8a0",
            "display": "NaN bit pattern, shown as 2E+308",
            "kind": "nonfinite"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0xc073400000000000",
                "display": "-308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
            "locator": "cells.A1",
            "note": null,
            "path": "content/notes/evidence/2026-11-04/round-nan-downstream.json",
            "repository": "ExcelFunctionsHandbook"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUND of a number near 1.8E308 can return a binary64 with an all-ones exponent field. A decimal result of 2^1024 or more keeps its 53-bit significand, and its exponent is carried into the exponent field without a check, so the bits are a NaN. ROUND, ROUNDDOWN and TRUNC return those bits; ROUNDUP gives #NUM!. The recorded rows hold 430 such ROUND rows, 102 ROUNDDOWN and 95 TRUNC, and all 627 follow this. Even ROUND(DBL_MAX,0), whose answer is DBL_MAX, returns 0x7ff000000000000a. The cell shows 2E+308 or 1.8E+308, and a pattern with its sign bit set shows 2E+308 too, with no minus. ISNUMBER gives TRUE, ISERROR FALSE, TYPE 1, ERROR.TYPE #N/A; A1=A1 and A1>0 are TRUE. =A1, N(A1), MAX(A1), ABS(A1) and IFERROR(A1,...) pass the pattern on, as does =-A1 with its sign unchanged. Arithmetic on it (A1+0, A1*1, A1-A1, SUM, ROUND) gives #NUM!, and TEXT(A1,\"0\") gives #VALUE!. Saved to .xlsx, each such cell is written as the error #NUM!; reopened, the cells read #NUM! until a full recalculation brings the patterns back.",
      "status": "measured",
      "title": "Near DBL_MAX, ROUND returns NaN bit patterns that Excel treats as numbers"
    },
    {
      "basis": "The readings below, typed as literals, and the family rule of FN-ROUND-002 over the recorded ROUND rows.",
      "documentation": null,
      "evidence": [
        {
          "commit": "282f03144b9eb01b63207c1fecd74a726ad6e85f",
          "locator": null,
          "note": "the literal readings",
          "path": "crates/calc-func/tests/captures/cfunc_m3_2/oracle.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "the fifteen-digit reading",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUND"
      ],
      "inferred": "That every tie follows this is inferred from the rule's fit to the recorded rows; the literal ties read directly are the ones below.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUND-004",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=ROUND(2.5,0)",
          "correct": null,
          "excel": {
            "bits": "0x4008000000000000",
            "display": "3",
            "kind": "number"
          },
          "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": "282f03144b9eb01b63207c1fecd74a726ad6e85f",
            "locator": "sheet rounding_boundaries, row 8, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/cfunc_m3_2/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ROUND(-2.5,0)",
          "correct": null,
          "excel": {
            "bits": "0xc008000000000000",
            "display": "-3",
            "kind": "number"
          },
          "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": "282f03144b9eb01b63207c1fecd74a726ad6e85f",
            "locator": "sheet rounding_boundaries, row 9, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/cfunc_m3_2/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ROUND(2.675,2)",
          "correct": {
            "bits": "0x40055c28f5c28f5c",
            "display": "2.67",
            "how": "The stored value lies below the decimal tie, so the nearest multiple of 0.01 is the lower one; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x400570a3d70a3d71",
            "display": "2.68",
            "kind": "number"
          },
          "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": "282f03144b9eb01b63207c1fecd74a726ad6e85f",
            "locator": "sheet rounding_boundaries, row 19, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/cfunc_m3_2/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=ROUND(1.005,2)",
          "correct": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "how": "The stored value lies below the decimal tie, so the nearest multiple of 0.01 is the lower one; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff028f5c28f5c29",
            "display": "1.01",
            "kind": "number"
          },
          "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": "282f03144b9eb01b63207c1fecd74a726ad6e85f",
            "locator": "sheet rounding_boundaries, row 21, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/cfunc_m3_2/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "A tie in ROUND goes away from zero, not to even: ROUND(2.5,0) is 3 and ROUND(-2.5,0) is -3. The tie is judged on the 15-digit reading of FN-ROUND-002, not on the stored value. So 1.005 and 2.675, whose binary64 values lie just below the decimal tie, count as ties: ROUND(1.005,2) is 1.01 and ROUND(2.675,2) is 2.68, where rounding the stored value would give 1 and 2.67.",
      "status": "measured",
      "title": "ROUND takes ties away from zero on the 15-digit reading, so 1.005 rounds up"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up. All 13,914 informative ROUNDDOWN and TRUNC rows with large num_digits follow the rule.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65536)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0000000000000",
                "display": "65536",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00041",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 65537)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fb999999999999a",
            "display": "0.1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0001000000000",
                "display": "65537",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00043",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(1.234567890123456e-200, 32768)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40e0000000000000",
                "display": "32768",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-ROUNDUP-00033",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-roundup.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TRUNC(1.234567890123456e-200, 65536)",
          "correct": {
            "bits": "0x166e3d71f622be8f",
            "display": "1.234567890123456e-200",
            "how": "The exact decimal expansion of this binary64 number has fewer than 32768 places, so a truncation at num_digits places returns the number itself.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x166e3d71f622be8f",
                "display": "1.234567890123456e-200",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x40f0000000000000",
                "display": "65536",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111roundcount-TRUNC-00041",
            "note": null,
            "path": "runs/w111-rounding-count-refinement-20260929/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP, ROUNDDOWN and TRUNC take the digit count from the low 16 bits of the integer part of |num_digits|, with the sign of num_digits. If |num_digits| is 2^32 or more, or those low bits are 32768 or more, the truncation happens at 100 places (10^-100, or 10^100 for a negative count). So 65536 acts as 0, 65537 as 1, 32768 to 65535 as 100, and -2147483748, whose low 16 bits are 100, as -100. In the out-of-range case ROUNDUP adds no unit for a positive count, and gives #NUM! for a negative count when a digit is dropped.",
      "status": "measured",
      "title": "ROUNDUP, ROUNDDOWN and TRUNC read num_digits from its low 16 bits"
    },
    {
      "basis": "Under the family rules the recorded rows match ROUND 36,821 of 36,945, ROUNDUP 52,022 of 52,841, ROUNDDOWN 59,182 of 59,995 and TRUNC 50,504 of 51,317, with no row lost and each remaining failure classified in the write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDUP"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(-1.125, 2)",
          "correct": {
            "bits": "0xbff2147ae147ae14",
            "display": "-1.13",
            "how": "The decimal answer has a nearest binary64 value; rounding away from zero at 2 places gives that value.",
            "kind": "number"
          },
          "excel": {
            "bits": "0xbff2147ae147ae15",
            "display": "-1.1300000000000001",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0xbff2000000000000",
                "display": "-1.125",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1863, key ROUNDUP|0xbff2000000000000|0x4000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "ROUNDUP(3.535, 2)",
          "correct": {
            "bits": "0x400c51eb851eb852",
            "display": "3.54",
            "how": "The decimal answer has a nearest binary64 value; rounding away from zero at 2 places gives that value.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x400c51eb851eb851",
            "display": "3.5399999999999996",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x400c47ae147ae148",
                "display": "3.535",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1809, key ROUNDUP|0x400c47ae147ae148|0x4000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/ROUNDUP.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP forms the ROUNDDOWN result, converts it to binary64, converts one unit 10^-p to binary64, and adds the two on the x87 unit, storing the sum to binary64. The sum need not be the binary64 value nearest the decimal answer, so ROUNDUP(-1.125,2) is -1.1300000000000001 and ROUNDUP(3.535,2) is 3.5399999999999996. The difference shows when the result is compared with a typed 3.54.",
      "status": "measured",
      "title": "ROUNDUP adds its unit in binary64, one bit from the decimal answer"
    },
    {
      "basis": "ROUNDUP rows match under these rules as counted in FN-ROUND-001. In the 1,148 recorded rows nearest the 2^-1026 boundary this quantity has 1 violation, itself an artefact of how the row was classified; the exact value, the reading and x minus the truncation give 54 to 547. The opposite-sign pair is a reading from Excel build 20527.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        },
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": null,
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/catalogue/rounding.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
          "locator": "rounding_family_matches_recorded_bank_rows",
          "note": "three rows of Excel's answers; failed before the change",
          "path": "crates/calc-func/tests/f1_math.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ROUNDUP"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-ROUNDUP-003",
      "open": [
        "14 ROUNDUP rows of tiny magnitude stay unmatched, in the near-tie class of FN-ROUND-002."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "ROUNDUP(1.0001086461844975e-307, 307)",
          "correct": {
            "bits": "0x0041fa182c40c60d",
            "display": "2e-307",
            "how": "The number has a nonzero digit past 307 places, so rounding away from zero at 307 places gives 2E-307; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x0031fa182c40c60d",
            "display": "1e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0031fa982c40c60e",
                "display": "1.0001086461844975e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "ROUNDUP(-1.2225073858507202e-307, 308)",
          "correct": {
            "bits": "0x80375eb9065434ab",
            "display": "-1.3e-307",
            "how": "The number has a nonzero digit past 308 places, so rounding away from zero at 308 places gives -1.3E-307; nearest binary64.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x80359283684dba77",
            "display": "-1.2e-307",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x8035fa182c40c60e",
                "display": "-1.2225073858507202e-307",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073400000000000",
                "display": "308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "ROUNDUP(1.0000000022250739e-300, 307)",
          "correct": null,
          "excel": {
            "bits": "0x01a56e1fe6ed23b2",
            "display": "1.0000001000000001e-300",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x01a56e1fc3c5c026",
                "display": "1.0000000022250739e-300",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x4073300000000000",
                "display": "307",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "ab94fb91a50fbdf89bdb2dac0e12fcd77a5e5f82",
            "locator": "rounding_family_matches_recorded_bank_rows",
            "note": null,
            "path": "crates/calc-func/tests/f1_math.rs",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "ROUNDUP adds no unit when the unit itself is below the normal range, whichever the sign. For a positive number it also adds none when the 15-digit reading, as binary64, lies less than 2^-1026 above the truncation; negative numbers have no such distance. So ROUNDUP(1.0001086461844975E-307,307) is 1E-307 and ROUNDUP(-1.0001086461844975E-307,307) is -2E-307, with the same digits dropped. At -1.2225E-307 and 308 places the unit, 1E-308, is subnormal, and the answer stays at -1.2E-307.",
      "status": "measured",
      "title": "At tiny magnitudes ROUNDUP may add no unit, and the two signs differ"
    },
    {
      "basis": "77 recorded controls over three bases (時, 人, 漢).",
      "documentation": null,
      "evidence": [
        {
          "commit": "44db028d72d692e94557b3657748d25643cd199d",
          "locator": "fn1_han_iteration_comparison_and_lookup_order",
          "note": "recorded order pinned",
          "path": "crates/calc-fml/tests/acceptance/f3.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.OP_LESS_THAN",
        "FUNC.SORT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-SORT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=\"時々\"<\"時時\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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": "f3275d997ae0706471e7b2c52b36fafad6966a03",
            "locator": "sheet fn1_collation, row 2, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/fn1_collation.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=\"時々\"<\"時a\"",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "TRUE",
            "kind": "logical"
          },
          "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": "f3275d997ae0706471e7b2c52b36fafad6966a03",
            "locator": "sheet fn1_collation, row 3, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/fn1_collation.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXTJOIN(\"|\",FALSE,SORT({\"時々\";\"時時\";\"時\";\"時a\";\"時b\"}))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "時|時々|時a|時b|時時",
            "kind": "text"
          },
          "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": "f3275d997ae0706471e7b2c52b36fafad6966a03",
            "locator": "sheet fn1_collation, row 229, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/fn1_collation.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In text comparison and SORT, after a Han character the iteration mark 々 sorts before Latin letters and before the doubled character: 時 < 時々 < 時a < 時b < 時時. Latin letters sort before Han here, and 時々 is not treated as 時時.",
      "status": "measured",
      "title": "A Han iteration mark is not read as a repeat of the character"
    },
    {
      "basis": "41,897 of 41,897 distinct normal positive recorded rows match. On the 164 rows where double and correct rounding differ, Excel follows double rounding every time. The subnormal row is 1 row, and no read-back of its input is recorded.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5ce0759bce6a30fff848a3d82035cadcad1aa49",
          "locator": "excel_sqrt_staged",
          "note": "the kernel in the product",
          "path": "crates/calc-func/src/ported/sqrt_fn.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.SQRT"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-SQRT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "SQRT(0.9999999999999999)",
          "correct": {
            "bits": "0x3fefffffffffffff",
            "display": "0.9999999999999999",
            "how": "Exact square root at 800 bits, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x3fefffffffffffff",
                "display": "0.9999999999999999",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-SQRT-00016",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-sqrt.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "SQRT(1.7976931348623157e+308)",
          "correct": {
            "bits": "0x5fefffffffffffff",
            "display": "1.3407807929942596e+154",
            "how": "Exact square root at 800 bits, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x5ff0000000000000",
            "display": "1.3407807929942597e+154",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x7fefffffffffffff",
                "display": "1.7976931348623157e+308",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-SQRT-00025",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-sqrt.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "SQRT(5e-324)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0000000000000001",
                "display": "5e-324",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-SQRT-00002",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-sqrt.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "The worksheet SQRT is RN53(RN64(sqrt(x))): the root is rounded to the x87 unit's 64-bit significand and then stored to binary64. On inputs where that double rounding lands differently from a single rounding, Excel takes the double-rounded value: SQRT(0.9999999999999999) is 1. A subnormal written to a cell reads back as 0, so the 0 for the smallest subnormal below may record that and not SQRT.",
      "status": "measured",
      "title": "SQRT is rounded twice, once to 64 bits and once to 53"
    },
    {
      "basis": "2,400 of 2,400 recorded rows with the stored square root; 2,399 without it. All 33 recorded rows with a number answer at DSM 366 fit t = 1, and none of the 17 of them in the run below fits 366/365.",
      "documentation": {
        "claim": "TBILLEQ is calculated as TBILLEQ = (365 x rate)/(360-(rate x DSM)); the page does not mention 182 days.",
        "source": "https://support.microsoft.com/en-us/office/tbilleq-function-2ab72d90-9b4d-4efe-9fc2-0f81f2c19c8c"
      },
      "evidence": [
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 435-466",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "counts",
          "note": "staged square root against alternatives",
          "path": "evidence/round23/tbilleq-hard/summary.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 388-410",
          "note": "the arithmetic in the product",
          "path": "crates/calc-func/src/ported/discount_bill_yearfrac_family.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.TBILLEQ"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-TBILLEQ-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "TBILLEQ(40633.25, 40836.25, 0.21193100748125787)",
          "correct": {
            "bits": "0x3fcedc78c550ced7",
            "display": "0.24110326418450853",
            "how": "mpmath at 800 bits: the exact quadratic at the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fcedc78c550cec1",
            "display": "0.24110326418450792",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e3d72800000000",
                "display": "40633.25",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e3f08800000000",
                "display": "40836.25",
                "kind": "number"
              }
            },
            {
              "name": "discount",
              "value": {
                "bits": "0x3fcb208e2511f676",
                "display": "0.21193100748125787",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w1115-TBILLEQ-01109",
            "note": null,
            "path": "runs/w111-5-20260924/answers/answers-w1115-tbilleq.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TBILLEQ(53886, 54252, 0.4522540814812992)",
          "correct": null,
          "excel": {
            "bits": "0x3fe7137ffe3328bc",
            "display": "0.7211303677406913",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40ea4fc000000000",
                "display": "53886",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40ea7d8000000000",
                "display": "54252",
                "kind": "number"
              }
            },
            {
              "name": "discount",
              "value": {
                "bits": "0x3fdcf1bb1a5c75f4",
                "display": "0.4522540814812992",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w1115-TBILLEQ-00179",
            "note": null,
            "path": "runs/w111-5-20260924/answers/answers-w1115-tbilleq.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "When DSM is above 182, TBILLEQ does not use the documented formula. It uses the bond-equivalent quadratic (-t + sqrt(t^2 - (2t-1)(1 - 1/p))) / (t - 1/2), with t = DSM/365 and p = price/100. At DSM 366, a bill across a 29 February, t is 1 and not 366/365. The square root is taken in extended precision and stored, RN53(RN64(sqrt)); the rest is binary64. For the row below, DSM 203, the documented formula gives 0.244038 and Excel 0.241103. Excel's bits are 22 units below the correctly rounded quadratic because of that staging.",
      "status": "measured",
      "title": "For bills longer than 182 days TBILLEQ is a quadratic, not the documented formula"
    },
    {
      "basis": "170 recorded TEXT readings on one TEXT sheet.",
      "documentation": null,
      "evidence": [
        {
          "commit": "f4930602d7b2f49cce13fb1bd030f7df2937adfa",
          "locator": "locale_tagged_date_names_follow_the_retained_fn3_readings",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.TEXT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXT-001",
      "open": [
        "Era readings cover Heisei and Reiwa only. Earlier Japanese eras have not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXT(DATE(2023,3,15),\"[$-407]mmm\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "Mrz",
            "kind": "text"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_text, row 6, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(DATE(2023,1,15),\"[$-411]mmm\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "1",
            "kind": "text"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_text, row 78, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(DATE(2019,5,1),\"[$-411]ggge\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "令和1",
            "kind": "text"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn3_text, row 164, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn3_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With a locale tag in the format, TEXT's names differ from common locale data. [$-407] (German) gives mmm for March as Mrz, while mmmm gives März. [$-411] (Japanese) gives mmm as a bare number, 1, while mmmm gives 1月. [$-419] (Russian) capitalises mmmm (Январь) but not mmm (янв), and capitalises ddd (Ср) but not dddd. The first year of the Reiwa era prints as 1, not 元年; g, gg and ggg give R, 令 and 令和, switching on 2019-05-01.",
      "status": "measured",
      "title": "Locale-tagged month, weekday and era names in TEXT follow their own table"
    },
    {
      "basis": "30 recorded readings: six numbers against the formats @, General, quoted @, @! and 0;0;0;@. @ and @! equalled General for all six numbers.",
      "documentation": null,
      "evidence": [
        {
          "commit": "179455f24c41c6fa91cada729b5982acb3a6aa77",
          "locator": "delivered_fn4_numeric_text_placeholders_use_general_display",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qt001 to qt030",
          "note": "30 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.TEXT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXT-002",
      "open": [
        "Formats mixing @ with digit placeholders have not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXT(123456789012345,\"@\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "1.23457E+14",
            "kind": "text"
          },
          "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 qt001, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(123456789012345,\"General\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "1.23457E+14",
            "kind": "text"
          },
          "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 qt002, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(1234567890.5,\"@\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "1234567891",
            "kind": "text"
          },
          "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 qt011, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(123456789012345,\"\"\"@\"\"\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "@",
            "kind": "text"
          },
          "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 qt003, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(-123456789012345,\"\"\"@\"\"\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "-@",
            "kind": "text"
          },
          "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 qt008, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(123456789012345,\"0;0;0;@\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "123456789012345",
            "kind": "text"
          },
          "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 qt005, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXT(-123456789012345,\"0;0;0;@\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "123456789012345",
            "kind": "text"
          },
          "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 qt010, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "A format of @ or @! on a number gives what General gives, not the digits of the number. TEXT(123456789012345,\"@\") is 1.23457E+14 and TEXT(1234567890.5,\"@\") is 1234567891. A quoted @ is a literal: TEXT(x,\"\"\"@\"\"\") is @ for a positive x, and -@ for a negative one, because the ordinary sign rule applies. In a format with four sections, @ is the text section and numbers use the others: TEXT(123456789012345,\"0;0;0;@\") shows all 15 digits, and TEXT(-123456789012345,\"0;0;0;@\") shows them with no minus sign, because the second section has none.",
      "status": "measured",
      "title": "In TEXT, an @ applied to a number gives the General display, not the full number"
    },
    {
      "basis": "Three recorded readings, with blank-cell and logical companions in the same run.",
      "documentation": null,
      "evidence": [
        {
          "commit": "080a6f2f7b65e750400837841f9db3d3822d8ec3",
          "locator": "empty_text_delimiter_errors_match_the_recorded_excel_values",
          "note": "recorded readings pinned",
          "path": "crates/calc-func/tests/f2_text.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.TEXTAFTER",
        "FUNC.TEXTBEFORE",
        "FUNC.TEXTSPLIT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXTSPLIT-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXTBEFORE(\"\",\"-\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00274-textbefore-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=TEXTAFTER(\"\",\"-\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#N/A",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00266-textafter-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=TEXTSPLIT(\"\",\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111typed-00282-textsplit-arg1-empty-text",
            "note": null,
            "path": "runs/w111-broad-typed-20260929-002/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "An empty string as text gives #N/A (delimiter not found) from TEXTBEFORE and TEXTAFTER, but #VALUE! from TEXTSPLIT.",
      "status": "measured",
      "title": "Empty text gives #N/A from TEXTBEFORE and TEXTAFTER, #VALUE! from TEXTSPLIT"
    },
    {
      "basis": "22 recorded TEXTSPLIT and REGEXEXTRACT readings, questions 049 to 093.",
      "documentation": null,
      "evidence": [
        {
          "commit": "78b470c77271d6af938e16d5493882b8300cee62",
          "locator": "roots 078 and 079",
          "note": "REGEXEXTRACT results in the product",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.REGEXEXTRACT",
        "FUNC.TEXTSPLIT"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-TEXTSPLIT-002",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=TEXTSPLIT({\"a,b,c\",\"d,e\"},\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"a\",\"d\"}",
            "kind": "array"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q049, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TEXTSPLIT({\"a,b\"},\",\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "a",
            "kind": "text"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q093, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=REGEXEXTRACT(\"a12b34\",\"[0-9]+\",{0,1,2})",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"12\",\"12\",#VALUE!}",
            "kind": "array"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q079, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=MAP({\"a,b\",\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#CALC!",
            "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q088, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=BYROW({\"a,b\";\"c,d\"},LAMBDA(txt,TEXTSPLIT(txt,\",\")))",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "{\"a\";\"c\"}",
            "kind": "array"
          },
          "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": "eceb809985e244e9d0a20f905e58fe57b8741ed8",
            "locator": "sheet fn2_q089, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn2_questions/oracle.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "When TEXTSPLIT's text is an array, even a 1 by 1 array, the call lifts over the elements and each returns only its first piece. MAP over the same lambda gives #CALC!, while BYROW gives the first pieces. REGEXEXTRACT lifted over return_mode does the same, and mode 2 on a pattern with no capture group gives #VALUE!.",
      "status": "measured",
      "title": "Over an array, TEXTSPLIT and REGEXEXTRACT keep only the first piece of each element"
    },
    {
      "basis": "Recorded rows of the broad capture; counts from the rounding write-up.",
      "documentation": null,
      "evidence": [
        {
          "commit": "b5d84a80a5a4640eca9ce04f232c0bc115503f34",
          "locator": null,
          "note": "research write-up: full-bank result, the rules, what stays open",
          "path": "content/notes/evidence/2026-11-04/rounding-EVIDENCE.md",
          "repository": "ExcelFunctionsHandbook"
        }
      ],
      "functions": [
        "FUNC.ROUNDDOWN",
        "FUNC.ROUNDUP",
        "FUNC.TRUNC"
      ],
      "inferred": null,
      "kind": "excel-differs-from-math",
      "note_id": "FN-TRUNC-001",
      "open": [
        "Why this one input converts 3 steps below nearest."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "TRUNC(2.2250738585072014e-308, 0)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "DBL_MIN is below 1, so truncating it at 0 or 1 places gives 0.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x000ffffffffffffa",
            "display": "2.2250738585071984e-308",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0010000000000000",
                "display": "2.2250738585072014e-308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-TRUNC-00026",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TRUNC(2.2250738585072014e-308, 1)",
          "correct": {
            "bits": "0x0000000000000000",
            "display": "0",
            "how": "DBL_MIN is below 1, so truncating it at 0 or 1 places gives 0.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x000ffffffffffffa",
            "display": "2.2250738585071984e-308",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number",
              "value": {
                "bits": "0x0010000000000000",
                "display": "2.2250738585072014e-308",
                "kind": "number"
              }
            },
            {
              "name": "num_digits",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111broad-20260929-TRUNC-00027",
            "note": null,
            "path": "runs/w111-broad-20260929/answers/answers-trunc.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With DBL_MIN (0x0010000000000000) as number, TRUNC, ROUNDDOWN and ROUNDUP return the subnormal 0x000ffffffffffffa at each num_digits recorded, so TRUNC(DBL_MIN,0) is not 0. That value is 6 steps below DBL_MIN and 3 steps below 0x000ffffffffffffd, the binary64 nearest the 15-digit reading 2.22507385850720E-308. The recorded rows hold 256 such cases for each of the three functions. ROUND gives 0 on the same inputs.",
      "status": "measured",
      "title": "TRUNC of DBL_MIN returns a subnormal, not 0"
    },
    {
      "basis": "66 recorded VALUE readings (all ten digits of each of the five scripts, then composed forms), 10 SQRT and 4 DATEVALUE readings.",
      "documentation": null,
      "evidence": [
        {
          "commit": "55697ab4f74bab852fef7bc76b08588c3a5f408e",
          "locator": "delivered_fn4_digit_scripts_and_numeric_date_widths",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qt031 to qt096",
          "note": "66 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "10 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/SQRT.reading.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "6 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/DATEVALUE.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.DATEVALUE",
        "FUNC.SQRT",
        "FUNC.VALUE"
      ],
      "inferred": "That other text-to-number routes, such as arithmetic operators, treat digits the same way is inferred from VALUE and SQRT agreeing.",
      "kind": "quirk",
      "note_id": "FN-VALUE-001",
      "open": [
        "Other digit blocks (Bengali, Tibetan, Khmer and so on) have not been read.",
        "Whether the set depends on the Windows or workbook locale has not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=VALUE(\"١\")",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 qt042, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"١٢٣\")",
          "correct": null,
          "excel": {
            "bits": "0x405ec00000000000",
            "display": "123",
            "kind": "number"
          },
          "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 qt081, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"1٢3\")",
          "correct": null,
          "excel": {
            "bits": "0x405ec00000000000",
            "display": "123",
            "kind": "number"
          },
          "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 qt084, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"١e2\")",
          "correct": null,
          "excel": {
            "bits": "0x4059000000000000",
            "display": "100",
            "kind": "number"
          },
          "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 qt088, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"१\")",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 qt062, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"๑\")",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 qt072, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"１\")",
          "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 qt032, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"1２3\")",
          "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 qt093, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-text-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=SQRT(\"۱٢३๔\")",
          "correct": null,
          "excel": {
            "bits": "0x4041906d51932c26",
            "display": "35.12833614050059",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-SQRT-digits-6",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/SQRT.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=DATEVALUE(\"٢٠٢٤-٠١-٠٢\")",
          "correct": null,
          "excel": {
            "bits": "0x40e61da000000000",
            "display": "45293",
            "kind": "number"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DATEVALUE-digits-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DATEVALUE.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In the recorded en-ZA settings, converting text to a number accepts Arabic-Indic (U+0660 to U+0669), extended Arabic-Indic (U+06F0 to U+06F9), Devanagari (U+0966 to U+096F) and Thai (U+0E50 to U+0E59) digits. They work alone, in runs, with a decimal point, in the exponent, with a sign or percent, and mixed with ASCII digits or with each other: VALUE(\"1٢3\") is 123, and SQRT of a four-digit string using four scripts is the root of 1234. Fullwidth digits (U+FF10 to U+FF19) give #VALUE! alone or mixed. DATEVALUE reads the four accepted scripts in a date written year-month-day.",
      "status": "measured",
      "title": "Text to number reads Arabic, Persian, Devanagari and Thai digits, but not fullwidth digits"
    },
    {
      "basis": "45 recorded VALUE readings covering year, month and day tokens of one to five digits, and 2 DATEVALUE readings.",
      "documentation": null,
      "evidence": [
        {
          "commit": "55697ab4f74bab852fef7bc76b08588c3a5f408e",
          "locator": "delivered_fn4_digit_scripts_and_numeric_date_widths",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets ql041 to ql085",
          "note": "45 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.DATEVALUE",
        "FUNC.VALUE"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-VALUE-002",
      "open": [
        "Three-digit years were not read.",
        "Other date orders and locales were not read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=VALUE(\"2024/02/01\")",
          "correct": null,
          "excel": {
            "bits": "0x40e6216000000000",
            "display": "45323",
            "kind": "number"
          },
          "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 ql078, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"2024/02/001\")",
          "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 ql079, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"2024/002/01\")",
          "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 ql081, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"1/2/1\")",
          "correct": null,
          "excel": {
            "bits": "0x40e2076000000000",
            "display": "36923",
            "kind": "number"
          },
          "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 ql041, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"24/2/1\")",
          "correct": null,
          "excel": {
            "bits": "0x40e6216000000000",
            "display": "45323",
            "kind": "number"
          },
          "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 ql065, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"0001/2/1\")",
          "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 ql057, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"2024/02/0\")",
          "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 ql084, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"2024-02-001\")",
          "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 ql085, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-list-controls.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=DATEVALUE(\"2024-002-01\")",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "formula-literal",
          "inputs": [],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DATEVALUE-digits-5",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DATEVALUE.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "In a three-part numeric date, leading zeros are not free. VALUE(\"2024/02/01\") is 45323, but VALUE(\"2024/02/001\") and VALUE(\"2024/002/01\") are #VALUE!, and so is any month or day of three or more digits in the 45 forms read. A year of one, two or four digits is read: \"1/2/1\" and \"1/02/01\" are 2001-02-01, \"24/2/1\" is 2024-02-01, while \"0001/2/1\" is #VALUE!. Month 0 and day 0 give #VALUE!. The same limit holds with hyphens: \"2024-02-001\" through VALUE, and \"2024-002-01\" and \"2024-02-001\" through DATEVALUE, are #VALUE!. The settings of this run are en-ZA: decimal point, space as thousands separator, year-month-day date order.",
      "status": "measured",
      "title": "A date as text takes at most two digits for month and day"
    },
    {
      "basis": "21 recorded VALUE readings.",
      "documentation": null,
      "evidence": [
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets q072 to q092",
          "note": "21 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "recorded_parenthesized_percent_text_keeps_its_suffix",
          "note": "the same parenthesised percent forms through INT",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.VALUE"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-VALUE-003",
      "open": [
        "Why the euro sign is accepted in en-ZA settings, and \"$\" is not, is not known. The other locales have not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=VALUE(\"(1)%\")",
          "correct": null,
          "excel": {
            "bits": "0xbf847ae147ae147b",
            "display": "-0.01",
            "kind": "number"
          },
          "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 q072, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"(%1)\")",
          "correct": null,
          "excel": {
            "bits": "0xbf847ae147ae147b",
            "display": "-0.01",
            "kind": "number"
          },
          "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 q075, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"%(1)\")",
          "correct": null,
          "excel": {
            "bits": "0xbf847ae147ae147b",
            "display": "-0.01",
            "kind": "number"
          },
          "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 q076, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"(1%)%\")",
          "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 q077, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"€1\")",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 q083, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"1€\")",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "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 q084, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"€(1)\")",
          "correct": null,
          "excel": {
            "bits": "0xbff0000000000000",
            "display": "-1",
            "kind": "number"
          },
          "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 q089, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"€1%\")",
          "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 q090, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"$1\")",
          "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 q091, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VALUE(\"£1\")",
          "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 q092, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4.capture.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "VALUE reads parentheses as a negative sign and one percent sign in any of these places: \"(1)%\", \"(1) %\", \"(1%)\", \"(%1)\" and \"%(1)\" are all -0.01. A second percent sign, as in \"(1%)%\", \"%(1)%\" and \"(1)%%\", gives #VALUE!, as does trailing text. The euro sign is read as a currency sign in the recorded en-ZA settings: \"€1\", \"1€\", \"€ 1\", \"€-1\", \"-€1\", \"(€1)\" and \"€(1)\" are 1 or -1. \"$1\" and \"£1\" are #VALUE! there. Currency and percent do not combine: \"€1%\", \"(€1)%\" and \"(R1)%\" are #VALUE!.",
      "status": "measured",
      "title": "VALUE takes one percent sign anywhere around parentheses, and a euro sign but not a dollar"
    },
    {
      "basis": "All 14,679 recorded rows of the twelve functions match: VAR.S, VAR.P, VAR, VARP, VARA, VARPA, STDEV.S, STDEV.P, STDEV, STDEVP, STDEVA and STDEVPA. Six of those rows separate the stored steps from plain binary64. 910 fresh scalar variance readings (Excel build 20527) replay exactly in rational arithmetic. Four cancellation edges were bisected to adjacent inputs; sixteen triples chosen to separate the stored ratio from 0.99*Q and from a division by 0.99 all agree with the ratio, where 0.99*Q misses all 16 and the division 14. Seven of eight magnitude brackets reach adjacent inputs, and sixteen chosen roots all need the 64-bit root followed by a store.",
      "documentation": null,
      "evidence": [
        {
          "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
          "locator": "variance_from_values",
          "note": "the rules in the product; the commit message carries the row counts",
          "path": "crates/calc-func/src/ported/variance_common.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
          "locator": "variance_cancellation_guard_stores_the_ratio",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f1_stats.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "af74247e1ed54f0b535143f1305261b98d80d18e",
          "locator": null,
          "note": "rows matched per function",
          "path": "crates/calc-func/witness-status.tsv",
          "repository": "DnaCalc"
        },
        {
          "commit": "a547d79ed61948cfd5f5d49f8c5a2a071ad37635",
          "locator": null,
          "note": "the 14,679 rows before and after",
          "path": "evidence/round25/variance-published-canonical-scope-receipt.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.STDEV",
        "FUNC.STDEV.P",
        "FUNC.STDEV.S",
        "FUNC.STDEVA",
        "FUNC.STDEVP",
        "FUNC.STDEVPA",
        "FUNC.VAR",
        "FUNC.VAR.P",
        "FUNC.VAR.S",
        "FUNC.VARA",
        "FUNC.VARP",
        "FUNC.VARPA"
      ],
      "inferred": "These tests were located with scalar arguments in separate cells; that the same edges hold for ranges and arrays is inferred, and their readings have not been taken. RN(variance*1000) <= |mean| is not separated from the rearrangement variance <= |mean|/1000. That a raw moment which overflows also takes the centered sum is inferred from recorded answers that stay finite.",
      "kind": "excel-differs-from-math",
      "note_id": "FN-VAR.S-001",
      "open": [
        "Whether the two tests keep the same edges for ranges and arrays."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "VAR.S(0.8769085090206681, 1, 1.123091490979332)",
          "correct": null,
          "excel": {
            "bits": "0x3f8f07c1f07c1e94",
            "display": "0.01515151515151495",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x3fec0fa26efa7e14",
                "display": "0.8769085090206681",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "number3",
              "value": {
                "bits": "0x3ff1f82ec882c0f6",
                "display": "1.123091490979332",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
            "locator": "variance_cancellation_guard_keeps_the_observed_edge",
            "note": null,
            "path": "crates/calc-func/tests/f1_stats.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "VAR.S(0.8769085090206679, 1, 1.1230914909793321)",
          "correct": {
            "bits": "0x3f8f07c1f07c1eb4",
            "display": "0.015151515151515006",
            "how": "Exact rational variance of the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3f8f07c1f07c1f00",
            "display": "0.015151515151515138",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x3fec0fa26efa7e12",
                "display": "0.8769085090206679",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "number3",
              "value": {
                "bits": "0x3ff1f82ec882c0f7",
                "display": "1.1230914909793321",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
            "locator": "variance_cancellation_guard_keeps_the_observed_edge",
            "note": null,
            "path": "crates/calc-func/tests/f1_stats.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "VAR.S(3.244042371786199e-10, 0.00034050419142641947)",
          "correct": null,
          "excel": {
            "bits": "0x3e6f1f88c6bbc51a",
            "display": "5.797144172853e-08",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x3df64afacd3a935a",
                "display": "3.244042371786199e-10",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3f3650b65dc7a1d6",
                "display": "0.00034050419142641947",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
            "locator": "variance_centered_guard_uses_the_absolute_mean",
            "note": null,
            "path": "crates/calc-func/tests/f1_stats.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "VAR.S(1.2976169487144796e-09, 0.0013620167657056779)",
          "correct": {
            "bits": "0x3eaf1f88c6bbc51a",
            "display": "9.2754306765648e-07",
            "how": "Exact rational variance of the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3eaf1f88c6bbc519",
            "display": "9.275430676564799e-07",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x3e164afacd3a935a",
                "display": "1.2976169487144796e-09",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3f5650b65dc7a1d6",
                "display": "0.0013620167657056779",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
            "locator": "variance_centered_guard_uses_the_absolute_mean",
            "note": null,
            "path": "crates/calc-func/tests/f1_stats.rs",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=VAR.S({157,376.82,189.207,12.38,12.473,483,306.24,324.1852,482.235,78})",
          "correct": {
            "bits": "0x40df28debfbf8a7f",
            "display": "31907.480453381777",
            "how": "Exact rational variance of the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x40df28debfbf8a84",
            "display": "31907.480453381795",
            "kind": "number"
          },
          "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": "c9f9d354165d2c20b9455c32582ea50baac7ba73",
            "locator": "sheet dcj9k_statistics, row 3, column 4",
            "note": null,
            "path": "crates/calc-func/tests/captures/catalogue/sections/dcj9k_statistics.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "STDEV.S(0, 1, 1.031052478719249)",
          "correct": null,
          "excel": {
            "bits": "0x3fe2c4c55ae2d85e",
            "display": "0.5865198874587454",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "number1",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "number2",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "number3",
              "value": {
                "bits": "0x3ff07f30e248f14c",
                "display": "1.031052478719249",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20527, Windows; bitness and CPU not recorded in this reading",
          "source": {
            "commit": "9c23b24e8d0a6bc913f16bc169f46f80d4e6bb18",
            "locator": "stdev_stores_the_extended_square_root",
            "note": null,
            "path": "crates/calc-func/tests/f1_stats.rs",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, S the running RN sum of the n values and Q the running RN sum of RN(x*x), the sample variance is RN(RN(Q - RN(RN(S*S)/n))/(n-1)) and the population variance RN(RN(RN(n*Q) - RN(S*S))/RN(n*n)). Excel then uses a centered sum instead, adding RN(d*d) with d = RN(x - mean) and dividing by n-1 or n, when either of two stored tests holds: RN(RN(RN(S*S)/n)/Q) > 0.99, or RN(variance*1000) <= |RN(S/n)|. The STDEV functions are the root of this, rounded to 64 bits and then stored. So the answer depends on which path a call takes: the first two VAR.S calls below differ by a few input steps in two arguments, the first passes the 0.99 test and is correctly rounded, and the second takes the raw moments and lands 76 units high. The next pair shows the size test: scaling the inputs by 4 leaves the first path.",
      "status": "measured",
      "title": "The variance family uses raw moments with stored steps, and two tests switch it to a centered sum"
    },
    {
      "basis": "Ten recorded option readings (cases 00022 to 00031 of the run). A rule reading the required arguments, then factor, then no_switch reproduces all 142 retained padding calls.",
      "documentation": {
        "claim": "If factor is omitted, it is assumed to be 2 (the double-declining balance method).",
        "source": "https://support.microsoft.com/en-us/office/vdb-function-dde4e207-f3fa-488d-91d2-66d55e861d73"
      },
      "evidence": [
        {
          "commit": "cfdc059510fa71bb7ae9609bb92e30a2d384de56",
          "locator": "recorded_vdb_explicit_missing_factor_is_zero",
          "note": "recorded readings pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.VDB"
      ],
      "inferred": null,
      "kind": "documentation-differs",
      "note_id": "FN-VDB-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=VDB(A100,A101,A102,A103,A104,,FALSE)",
          "correct": null,
          "excel": {
            "bits": "0x4056800000000000",
            "display": "90",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "cost",
              "value": {
                "bits": "0x408f400000000000",
                "display": "1000",
                "kind": "number"
              }
            },
            {
              "name": "salvage",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "life",
              "value": {
                "bits": "0x4024000000000000",
                "display": "10",
                "kind": "number"
              }
            },
            {
              "name": "start_period",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "end_period",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111dep-options-00022-vdb-optional-5-22",
            "note": null,
            "path": "runs/w111-depreciation-options-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=VDB(A100,A101,A102,A103,A104,\"2\",FALSE)",
          "correct": null,
          "excel": {
            "bits": "0x4064000000000000",
            "display": "160",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "cost",
              "value": {
                "bits": "0x408f400000000000",
                "display": "1000",
                "kind": "number"
              }
            },
            {
              "name": "salvage",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "life",
              "value": {
                "bits": "0x4024000000000000",
                "display": "10",
                "kind": "number"
              }
            },
            {
              "name": "start_period",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "end_period",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111dep-options-00025-vdb-optional-5-25",
            "note": null,
            "path": "runs/w111-depreciation-options-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "=VDB(A100,A101,A102,A103,A104,\"TRUE\",FALSE)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#VALUE!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "cost",
              "value": {
                "bits": "0x408f400000000000",
                "display": "1000",
                "kind": "number"
              }
            },
            {
              "name": "salvage",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "life",
              "value": {
                "bits": "0x4024000000000000",
                "display": "10",
                "kind": "number"
              }
            },
            {
              "name": "start_period",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            },
            {
              "name": "end_period",
              "value": {
                "bits": "0x4000000000000000",
                "display": "2",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel build not recorded in this run; bulk captures of the same date (2026-09-29) record Excel 16.0 build 20430, Windows 64-bit, workbook compatibility 2",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "w111dep-options-00026-vdb-optional-5-26",
            "note": null,
            "path": "runs/w111-depreciation-options-20260929/outcomes/excel.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "VDB defaults factor to 2 only when the argument is left off the end of the call. An empty slot, as in VDB(c,s,l,a,b,,FALSE), is read as 0, and the result is the straight-line amount: 90 here, where factor 2 gives 160. Text factors other than numbers give #VALUE!, including \"TRUE\" and \"FALSE\", while \"2\" is read as 2.",
      "status": "measured",
      "title": "An empty factor slot in VDB is 0, not the default 2"
    },
    {
      "basis": "The readings conflict with each other. The 479 comes from the DnaCalc witness differences file. The 1,926 pairs come from one request of 3,852 calls, with exact input read-backs, compared pair by pair.",
      "documentation": {
        "claim": "If Return_type is out of the range specified in the table above, a #NUM! error is returned.",
        "source": "https://support.microsoft.com/en-us/office/weeknum-function-e5c43a03-b4ab-426c-b411-b18c13c75340"
      },
      "evidence": [
        {
          "commit": "9c23dde1dfd6d93e742d763a4bad3eaec229b29c",
          "locator": "WEEKNUM",
          "note": "index of the conflicting readings",
          "path": "crates/calc-func/witness-differences.tsv",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "dc-zmk.2",
          "note": "the repeat comparison of 3,852 calls in build 20527",
          "path": ".beads/issues.jsonl",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.WEEKNUM"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-WEEKNUM-001",
      "open": [
        "What decides the answer for an undocumented return_type is not known.",
        "The raw readings of build 20527 are not yet in a published capture. Their counts are recorded in the DnaCalc issue tracker."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "WEEKNUM(0, 23)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "serial_number",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "return_type",
              "value": {
                "bits": "0x4037000000000000",
                "display": "23",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "date-boundary-WEEKNUM-00188",
            "note": null,
            "path": "runs/w111-date-boundaries-20260929/answers/answers-weeknum.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "WEEKNUM(0, 23)",
          "correct": null,
          "excel": {
            "bits": "0x3ff0000000000000",
            "display": "1",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "serial_number",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "return_type",
              "value": {
                "bits": "0x4037000000000000",
                "display": "23",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "date-conversion-WEEKNUM-01331",
            "note": null,
            "path": "runs/w111-date-conversion-20260929/answers/answers-weeknum.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "WEEKNUM(0, 33)",
          "correct": null,
          "excel": {
            "bits": "0x0000000000000000",
            "display": "0",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "serial_number",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "return_type",
              "value": {
                "bits": "0x4040800000000000",
                "display": "33",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "date-boundary-WEEKNUM-00940",
            "note": null,
            "path": "runs/w111-date-boundaries-20260929/answers/answers-weeknum.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "WEEKNUM(0, 33)",
          "correct": null,
          "excel": {
            "bits": null,
            "display": "#NUM!",
            "kind": "error"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "serial_number",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "return_type",
              "value": {
                "bits": "0x4040800000000000",
                "display": "33",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, CPU not recorded in this capture",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "date-conversion-WEEKNUM-00133",
            "note": null,
            "path": "runs/w111-date-conversion-20260929/answers/answers-weeknum.json.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "The documentation says an out-of-range return_type gives #NUM!. Excel usually does, but not always, and the same call can give different answers. In recorded captures of build 20430, 479 (serial_number, return_type) pairs were read with different results: usually #NUM!, sometimes a number (0, 1, 9, 10, 53 or 54), and some pairs differ within one run file. In build 20527 a matrix of 1,926 pairs (serial_number 0, 1, 59, 60, 61 and 43831, return_type -32 to 288) was read twice in one request, and 623 pairs differed between the two readings: 619 between a number and #NUM!, and 4 between 9 and 10. Every difference has an undocumented return_type. The ten documented return_types (1, 2, 11 to 17 and 21) gave the same answer both times. No rule for the undocumented values is claimed.",
      "status": "measured",
      "title": "WEEKNUM with an invalid return_type can answer differently each time it is called"
    },
    {
      "basis": "8 recorded readings with an empty B1, one per function, each paired with a reading with TRUE in B1.",
      "documentation": null,
      "evidence": [
        {
          "commit": "c4c5dde7e2dcf735d2849835fc49769e2ab67ba7",
          "locator": "delivered_fn4_blank_date_references_read_serial_zero",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "sheets qa031 and qa032, and the like pairs of each function",
          "note": "recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.NETWORKDAYS",
        "FUNC.NETWORKDAYS.INTL",
        "FUNC.TBILLEQ",
        "FUNC.TBILLPRICE",
        "FUNC.TBILLYIELD",
        "FUNC.WORKDAY",
        "FUNC.WORKDAY.INTL",
        "FUNC.YEARFRAC"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-WORKDAY-001",
      "open": [
        "An argument left empty in the call was not read here for YEARFRAC and the T-bill functions."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "=NETWORKDAYS(B1,5)",
          "correct": null,
          "excel": {
            "bits": "0x4010000000000000",
            "display": "4",
            "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 qa032, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=NETWORKDAYS(B1,5)",
          "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 qa031, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=WORKDAY(B1,2)",
          "correct": null,
          "excel": {
            "bits": "0x4008000000000000",
            "display": "3",
            "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 qa054, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=WORKDAY(B1,2)",
          "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 qa053, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=NETWORKDAYS.INTL(B1,5,1)",
          "correct": null,
          "excel": {
            "bits": "0x4010000000000000",
            "display": "4",
            "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 qa040, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=WORKDAY.INTL(B1,2,1)",
          "correct": null,
          "excel": {
            "bits": "0x4008000000000000",
            "display": "3",
            "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 qa062, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=YEARFRAC(B1,5,0)",
          "correct": null,
          "excel": {
            "bits": "0x3f8c71c71c71c71c",
            "display": "0.013888888888888888",
            "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 qa072, row 20, column 10",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/functions-fn4-arguments.capture.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "=TBILLEQ(B1,5,0.1)",
          "correct": null,
          "excel": {
            "bits": "0x3fb9fddd1b6a757f",
            "display": "0.10152990264255911",
            "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 qa082, 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": "A reference to an empty cell as the first date of these functions reads as serial 0 and gives a normal answer: NETWORKDAYS(B1,5) is 4 and WORKDAY(B1,2) is 3. YEARFRAC(B1,5,0) is 5/360. TRUE in the same cell gives #VALUE!, as a direct TRUE does, so a blank is not treated as the logical FALSE either.",
      "status": "measured",
      "title": "An empty cell as a first date is serial 0, but a logical in that cell is #VALUE!"
    },
    {
      "basis": "19 YEARFRAC readings around serial 60 and the 1904, 2000 and 2004 leap days, 35 readings with serial 0 on all five bases, and 3 readings each from five financial functions.",
      "documentation": null,
      "evidence": [
        {
          "commit": "c4c5dde7e2dcf735d2849835fc49769e2ab67ba7",
          "locator": null,
          "note": "the leap-day test as implemented",
          "path": "crates/calc-func/src/ported/day_count_common.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "delivered_scalar_readings_follow_the_application_route",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "87 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ACCRINTM",
        "FUNC.DISC",
        "FUNC.INTRATE",
        "FUNC.PRICEDISC",
        "FUNC.RECEIVED",
        "FUNC.YEARFRAC"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-YEARFRAC-001",
      "open": [
        "An argument left empty in the call, as in YEARFRAC(,5), has not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "YEARFRAC(59, 60, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3f66719f3601671a",
            "display": "0.0027397260273972603",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x404d800000000000",
                "display": "59",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-3",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(1520, 1521, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3f6661ec6a5122f9",
            "display": "0.00273224043715847",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x4097c00000000000",
                "display": "1520",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4097c40000000000",
                "display": "1521",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-9",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(0, 5, 0)",
          "correct": null,
          "excel": {
            "bits": "0x3f8c71c71c71c71c",
            "display": "0.013888888888888888",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-calendar-zero-11",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(0, 60, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3fc50a8542a150a8",
            "display": "0.1643835616438356",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "DISC(59, 60, 99, 100, 1)",
          "correct": null,
          "excel": {
            "bits": "0x400d33333333333a",
            "display": "3.650000000000003",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x404d800000000000",
                "display": "59",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4058c00000000000",
                "display": "99",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DISC-fictitious-leap-day-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DISC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "DISC(1520, 1521, 99, 100, 1)",
          "correct": null,
          "excel": {
            "bits": "0x400d47ae147ae14f",
            "display": "3.6600000000000033",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x4097c00000000000",
                "display": "1520",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4097c40000000000",
                "display": "1521",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4058c00000000000",
                "display": "99",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DISC-fictitious-leap-day-2",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DISC.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Excel's calendar holds a 29 February 1900, serial 60, that never existed. On basis 1 (actual/actual) it does not make 1900 a leap year: YEARFRAC(59,60,1) is 1/365, where the real 1904-02-29 gives YEARFRAC(1520,1521,1) = 1/366. Serial 0 is accepted as a date: YEARFRAC(0,5,0) is 5/360 and YEARFRAC(0,60,1) is 60/365. Reversed dates give the same answer as in order. ACCRINTM, DISC, INTRATE, PRICEDISC and RECEIVED take the same 365 and 366 on those dates: DISC(59,60,99,100,1) is about 3.65 and DISC(1520,1521,99,100,1) about 3.66.",
      "status": "measured",
      "title": "On basis 1 the fictitious 1900-02-29 is not a leap day, and YEARFRAC takes serial 0 as a date"
    }
  ],
  "schema": "efh.function-notes-api/v1",
  "source": "content/notes/FN-*.json (efh.function-note/v1)"
}