{
  "category": "Financial functions",
  "display_name": "TBILLYIELD",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.TBILLYIELD",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 2400,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 2400,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 2,400 in the answer bank and 11 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 2,411 recorded answers",
    "workbook_corpus": {
      "cells": 11,
      "matched": 11
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/bonds.rs#L215-L218",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/discount_bill_yearfrac_family.rs#L336-L358"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/bonds::bill_arguments",
        "catalogue/bonds::bill_out",
        "catalogue/financial::required_number",
        "catalogue/financial::date_1900",
        "locale::days_from_civil",
        "locale::civil_from_days",
        "locale::excel_serial_from_ymd",
        "locale::ymd_from_excel_serial",
        "ported/discount_bill_yearfrac_family::max_excel_serial",
        "ported/discount_bill_yearfrac_family::parse_date_serial",
        "ported/discount_bill_yearfrac_family::actual_days",
        "ported/discount_bill_yearfrac_family::tbill_days",
        "ported/discount_bill_yearfrac_family::map_discount_bill_yearfrac_error_to_ws",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_x87_sub",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric::excel_x87_div",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/bonds.rs#L215-L218",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 2,411 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.TBILLYIELD.json",
  "name": "TBILLYIELD",
  "notes": [
    {
      "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": "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!"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **[TBILLEQ](FUNC.TBILLEQ.md)** — the bond-equivalent yield of the same bill. Up to 182 days,\n  `TBILLEQ = TBILLYIELD × 365/360` for a bill at the same price. Above 182 days `TBILLEQ` changes\n  formula and this relation fails.\n- **`TBILLPRICE`** — the price from the discount rate. It is not the inverse of this function, which\n  takes a yield on the investment, so feeding a `TBILLYIELD` result to `TBILLPRICE` as `discount`\n  does not recover `pr`.\n- **[DISC](FUNC.DISC.md)** — the discount rate from the price, with a `basis`. It divides by the\n  redemption where `TBILLYIELD` divides by the price.\n- **[INTRATE](FUNC.INTRATE.md)** — the same investment-side rate. `INTRATE(s, m, pr, 100, 2)` is the\n  same quantity on Actual/360, apart from the one-year limit; FN-DISC-001 gives both the same order\n  of arithmetic.\n- **[YEARFRAC](FUNC.YEARFRAC.md)** — not used here. The day count is a plain difference of serials,\n  and there is no year-length question at all.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n**Cancellation.** When `pr` is close to 100, the subtraction `100 − pr` cancels: the difference\nkeeps the absolute accuracy of `pr` and loses relative accuracy. `DSM` is small for short bills, so\n`360/DSM` then scales up that error. This is intrinsic to a yield quoted from a price, and no\nrearrangement recovers digits the input does not have.\n\n**No calendar arithmetic.** There is no basis and no year length, so none of the family's 30/360\nand Actual/actual questions arise. The only calendar logic is the one-year limit.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number`, an annualized yield as a decimal fraction.\n\nFigures in this section and the next are from the 2,400 rows behind the notes below unless marked\nas a reading. Readings are from Excel 16.0.20527.20088 on Windows, with bitness and CPU not recorded\nin the reading file.\n\n- **`pr > 100` is admissible and yields a negative rate.** There is no check against a price above\n  redemption. All 27 such rows inside the date limits return a negative number.\n- **A low price and a short span amplify.** The first note's example is a one-day bill at a price of\n  about 2.28, with a yield of about 15,431. The formula is working, and the number means nothing\n  commercially.\n- **The one-year limit is a calendar rule.** The bound is the same month and day a year on, not a\n  count of days. A 366-day bill across a 29 February is allowed. From 29 February, maturity on 1\n  March a year later is allowed (3 rows), and 2 March is `#NUM!`. From 28 February of the year before\n  a leap year, maturity on 29 February a year later is `#NUM!` (2 rows), although it is the last day\n  of the month.\n- **Serial 0 works as a settlement date.** Readings give numbers for maturities of serial 1, 5, 365\n  and 366, and `#NUM!` for serial 367.\n- **The order of arguments decides which error appears.** Readings show the first failing argument\n  wins: `TBILLYIELD(#REF!,TRUE,90)` is `#REF!` and `TBILLYIELD(TRUE,#REF!,90)` is `#VALUE!`.\n\n\n\n### Errors\n\n\n| Error | Condition | Source |\n|---|---|---|\n| `#VALUE!` | `settlement` or `maturity` is not a valid date | Documented; see below |\n| `#NUM!` | `pr ≤ 0` | Documented; 37 rows inside the limit |\n| `#NUM!` | `settlement ≥ maturity` | Documented; readings at serial 1 and 0 |\n| `#NUM!` | Maturity more than one year after settlement | Documented; 745 rows with no other fault |\n| `#NUM!` | A negative serial | Differs from documentation; one reading |\n| `#VALUE!` | A logical in any slot | Not documented; readings |\n\nMicrosoft says an invalid date is `#VALUE!`. The one reading with a negative settlement,\n`TBILLYIELD(−1,TRUE,90)`, returns `#NUM!`, ahead of the logical in the next slot, so an out-of-range\nnumber is not treated that way. The `#VALUE!` measured for a date argument is the logical one.\n\n",
    "sources": "- Microsoft, \"TBILLYIELD function\" —\n  <https://support.microsoft.com/en-us/office/tbillyield-function-6d381232-f4b0-4cd5-8e97-45b9c03468ba>\n  (syntax, argument meanings, the serial-date and truncation remarks, the `#VALUE!` and `#NUM!`\n  conditions, the wording of `DSM`, and the worked example). The equation on that page is an image\n  and was not readable, so no formula here is sourced from it.\n- The function notes on this page, and the recorded Excel rows and readings their evidence lists\n  cite. The fit at every span, the one-year-limit cases, the error rows, the negative yields and the\n  serial and logical readings were read from those records for this page and go beyond the notes'\n  own text; each carries the Excel build stated in Result and edge cases.\n- Handbook evidence record `EV-FIN-0025` — the record naming this surface.\n- Handbook, [The value universe](../model/01-value-universe.md) and\n  [Coercion and lifting](../model/02-coercion-and-lifting.md).\n- Handbook, [Claim language and honesty](../model/06-claim-language.md) — the scoping rules this\n  page's claims are written under.\n- Handbook projections `data/functions/FUNC.TBILLYIELD.json` and\n  `data/presence/FUNC.TBILLYIELD.json` (arity, classification axes, implementing module and sibling\n  set).\n\n",
    "version-differences": "The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 20430 | Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics | 2,400 |\n\nThe record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.TBILLYIELD.json).",
    "what-it-does": "\n`TBILLYIELD(settlement, maturity, pr)` returns the **yield of a Treasury bill** bought at price `pr`\nper 100 of face value and redeemed at 100.\n\nWith `DSM` the actual number of days from settlement to maturity:\n\n    TBILLYIELD = (100 − pr) / pr × 360 / DSM\n\nThe first factor is the gain as a fraction of the price paid. The second scales it to a year of\n360 days. Microsoft's page prints its equation as an image that could not be read and defines `DSM`\nin words. The expression above is the one the first note below records from Excel's own answers,\nincluding the grouping `((100 − pr)/pr) × (360/DSM)`.\n\nThis is a yield on the **investment**, simple and uncompounded, on a 360-day year. It is not a\ndiscount rate, which would divide by 100 and not by `pr`, and it is not the bond-equivalent yield\nthat [TBILLEQ](FUNC.TBILLEQ.md) returns, which uses a 365-day year.\n\nThe relation to the discount rate `d` of the same bill is exact:\n\n    TBILLYIELD = 360 × d / (360 − d × DSM)\n\nMicrosoft's example: settlement 31 March 2008, maturity 1 June 2008, price 98.45. That is 62 actual\ndays, so\n\n    (100 − 98.45) / 98.45 × 360 / 62 = 0.0914169…\n\nwhich Microsoft shows as 9.14%. A 30/360 count would be 61 and would give 0.0929, so the example\nconfirms actual days.\n\n**One formula at every span.** Unlike [TBILLEQ](FUNC.TBILLEQ.md), this function has no long-bill\nbranch. In the rows behind the notes below (Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7\n4800H), all 1,586 numeric rows fit the formula above, including the 738 with `DSM` above 182.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `settlement` | The bill's settlement date, the date after issue when it trades to the buyer. Required. | — |\n| `maturity` | The date the bill expires. Required. | — |\n| `pr` | The bill's price per $100 of face value. Required. | — |\n\nThere is no `basis`, and there is no redemption argument: a bill redeems at 100. An amount passed as\n`pr` returns a nonsense answer, not an error, because the function subtracts it from 100.\n\nDates are documented as truncated to integers, and 196 of the 2,400 rows behind the notes carry a\nfractional date that fits this.\n\n**Date arguments do not follow the ordinary to-number rules.** Logicals are refused with `#VALUE!`\nin all three slots, including `FALSE`. An empty cell as `settlement` reads as serial 0 and gives a\nnormal answer, as the notes below record for this family: `TBILLYIELD(B1,5,90)` is 8. A direct `0`\ngives the same answer. See [Coercion and lifting](../model/02-coercion-and-lifting.md) for the\nshared model these depart from.\n\n\n"
  },
  "signature": {
    "display": "TBILLYIELD(settlement, maturity, pr)",
    "parameters": [
      {
        "description": null,
        "name": "settlement",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "maturity",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "pr",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 3,
        "min": 3
      },
      "category": "Financial functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "None",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Treasury bill yield, from its price",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the yield for a Treasury bill",
        "microsoft_url": "https://support.microsoft.com/en-us/office/tbillyield-function-6d381232-f4b0-4cd5-8e97-45b9c03468ba"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "TBILLYIELD"
        },
        {
          "locale": "bg-BG",
          "name": "TBILLYIELD"
        },
        {
          "locale": "cs-CZ",
          "name": "TBILLYIELD"
        },
        {
          "locale": "da-DK",
          "name": "STATSOBLIGATION.AFKAST"
        },
        {
          "locale": "de-DE",
          "name": "TBILLYIELD"
        },
        {
          "locale": "el-GR",
          "name": "TBILLYIELD"
        },
        {
          "locale": "en-AU",
          "name": "TBILLYIELD"
        },
        {
          "locale": "en-GB",
          "name": "TBILLYIELD"
        },
        {
          "locale": "en-US",
          "name": "TBILLYIELD"
        },
        {
          "locale": "es-ES",
          "name": "LETRA.DE.TES.RENDTO"
        },
        {
          "locale": "et-EE",
          "name": "TBILLYIELD"
        },
        {
          "locale": "fi-FI",
          "name": "OBLIG.TUOTTO"
        },
        {
          "locale": "fr-FR",
          "name": "RENDEMENT.BON.TRESOR*"
        },
        {
          "locale": "he-IL",
          "name": "TBILLYIELD"
        },
        {
          "locale": "hr-HR",
          "name": "TBILLYIELD"
        },
        {
          "locale": "hu-HU",
          "name": "KJEGY.HOZAM"
        },
        {
          "locale": "id-ID",
          "name": "TBILLYIELD"
        },
        {
          "locale": "it-IT",
          "name": "TBILLYIELD"
        },
        {
          "locale": "ja-JP",
          "name": "TBILLYIELD"
        },
        {
          "locale": "ko-KR",
          "name": "TBILLYIELD"
        },
        {
          "locale": "lt-LT",
          "name": "TBILLYIELD"
        },
        {
          "locale": "lv-LV",
          "name": "TBILLYIELD"
        },
        {
          "locale": "nb-NO",
          "name": "TBILLYIELD"
        },
        {
          "locale": "nl-NL",
          "name": "SCHATK.REND"
        },
        {
          "locale": "pl-PL",
          "name": "RENT.BS"
        },
        {
          "locale": "pt-BR",
          "name": "TBILLYIELD"
        },
        {
          "locale": "pt-PT",
          "name": "OTNLUCRO"
        },
        {
          "locale": "ro-RO",
          "name": "TBILLYIELD"
        },
        {
          "locale": "ru-RU",
          "name": "ДОХОДКЧЕК"
        },
        {
          "locale": "sk-SK",
          "name": "TBILLYIELD"
        },
        {
          "locale": "sl-SI",
          "name": "TBILLYIELD"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "TBILLYIELD"
        },
        {
          "locale": "sv-SE",
          "name": "SSVXRÄNTA"
        },
        {
          "locale": "th-TH",
          "name": "TBILLYIELD"
        },
        {
          "locale": "tr-TR",
          "name": "HTAHÖDEME işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "TBILLYIELD"
        },
        {
          "locale": "vi-VN",
          "name": "TBILLYIELD"
        },
        {
          "locale": "zh-CN",
          "name": "TBILLYIELD"
        },
        {
          "locale": "zh-HK",
          "name": "TBILLYIELD"
        },
        {
          "locale": "zh-TW",
          "name": "TBILLYIELD"
        }
      ],
      "signature": {
        "display": "TBILLYIELD(settlement, maturity, pr)",
        "parameters": [
          {
            "description": null,
            "name": "settlement",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "maturity",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "pr",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "TBILLYIELD",
      "version_marker": null,
      "xlcall": {
        "code": "440",
        "symbol": "xlfTbillyield"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/tbillyield-function-6d381232-f4b0-4cd5-8e97-45b9c03468ba"
  },
  "try_it": {
    "formula": "=TBILLYIELD(47701, 47702, 2.279784366464575)"
  },
  "url": "https://handbook.dnacalc.com/functions/TBILLYIELD.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "TBILLYIELD(47701, 47702, 2.279784366464575) returned 15430.96713248709 (0x40ce237bcaff517a). Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.",
      "excel_build": "16.0 build 20430",
      "observations": [
        {
          "call": "TBILLYIELD(47701, 47702, 2.279784366464575)",
          "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"
        }
      ],
      "platform": "Windows 64-bit, AMD Ryzen 7 4800H",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/3345a87/content/notes/FN-DISC-001.json"
      ]
    },
    {
      "behaviour": "2,400 captured inputs are indexed for this environment. Capture dates: 2026-09-25 to 2026-09-25. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.TBILLYIELD.json"
      ]
    }
  ]
}