{
  "category": "Financial functions",
  "display_name": "INTRATE",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.INTRATE",
  "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 46 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 2,446 recorded answers",
    "workbook_corpus": {
      "cells": 46,
      "matched": 46
    }
  },
  "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#L195-L198",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/discount_bill_yearfrac_family.rs#L206-L229"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/bonds::basis",
        "catalogue/bonds::bill_out",
        "catalogue/financial::date_1900",
        "locale::days_from_civil",
        "locale::civil_from_days",
        "locale::excel_serial_from_ymd",
        "locale::ymd_from_excel_serial",
        "ported/day_count_common::days_in_month",
        "ported/day_count_common::us_30_360",
        "ported/day_count_common::real_days_in_year",
        "ported/day_count_common::excel_actual_actual_year",
        "ported/discount_bill_yearfrac_family::max_excel_serial",
        "ported/discount_bill_yearfrac_family::parse_basis",
        "ported/discount_bill_yearfrac_family::parse_date_serial",
        "ported/discount_bill_yearfrac_family::actual_days",
        "ported/discount_bill_yearfrac_family::days360_us",
        "ported/discount_bill_yearfrac_family::days360_eu",
        "ported/discount_bill_yearfrac_family::security_days_and_year",
        "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#L195-L198",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 2,446 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.INTRATE.json",
  "name": "INTRATE",
  "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": "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-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **[DISC](FUNC.DISC.md)** — the redemption-side quotation of the same instrument, with the exact\n  conversion above. Read the two pages together.\n- **[RECEIVED](FUNC.RECEIVED.md)** — what comes back at maturity for a given investment, but it\n  takes a discount rate, not `INTRATE`'s rate, so `RECEIVED(…, INTRATE(…))` does not reproduce the\n  redemption. Convert first with `d = r / (1 + r × T)`, or compute `investment × (1 + r × T)`.\n- **`YIELDMAT`** — for a security that pays interest at maturity but *accrues* from an issue date,\n  which `INTRATE` does not model. If your instrument has an issue date distinct from settlement,\n  `INTRATE` is the wrong function.\n- **`TBILLEQ`** — the bond-equivalent yield of a Treasury bill: the same idea of restating a\n  discount quotation on the investment side, wired to the T-bill conventions.\n- **`RRI`** — the *compound* rate that takes a present value to a future value over `n` periods.\n  `INTRATE` is the simple-interest answer to a superficially similar question, and the two diverge\n  as soon as the horizon exceeds a year.\n- **`YEARFRAC`** — the day-count machinery, exposed directly; the fastest way to isolate whether a\n  surprising `INTRATE` result comes from the calendar or from the amounts.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\nThe arithmetic is one subtraction, two divisions and a multiplication. All of the interesting\nbehaviour is in `T` and in one cancellation site.\n\n**Cancellation in `redemption − investment`.** For a short-dated instrument the two amounts agree to\nmany significant figures, so the difference loses precision exactly where `1/T` is largest. The\nrelative error of the result is the relative error of the difference multiplied by nothing at\nall — the `1/T` factor scales both the value and its error — but the *absolute* error in the rate\ngrows with `1/T`, which is what a reader comparing two nearly identical short-dated quotes will\nnotice. There is no rearrangement that avoids this; the information is genuinely in the last few\ndigits of the two inputs.\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number` — an annualized rate as a decimal fraction.\n\n- **`redemption < investment`** is admissible and yields a negative rate. There is no guard against\n  a loss-making trade.\n- **`settlement ≥ maturity`** is a domain error rather than a sign flip.\n- **Short spans amplify.** As `T → 0` the rate diverges; a one-day instrument at a hundredth of a\n  percent gain annualizes to a large number, and that is the arithmetic working, not failing.\n- **Non-integer `basis`** is truncated toward zero before the range check.\n- Empty, missing and error arguments follow the shared call model; see\n  [The value universe](../model/01-value-universe.md).\n\n\n\n### Errors\n\n\nAs documented on Microsoft's `INTRATE` page:\n\n| Error | Condition |\n|---|---|\n| `#VALUE!` | `settlement` or `maturity` is not a valid serial date number |\n| `#NUM!` | `investment ≤ 0` or `redemption ≤ 0` |\n| `#NUM!` | `basis < 0` or `basis > 4` |\n| `#NUM!` | `settlement ≥ maturity` |\n\n",
    "sources": "- Microsoft, \"INTRATE function\" —\n  <https://support.microsoft.com/en-us/office/intrate-function-5cb34dde-a221-4cb6-b3eb-0b9e55e1316f>\n  (syntax, argument meanings, the day-count basis table, the serial-date and truncation remarks,\n  and the documented `#VALUE!` and `#NUM!` conditions).\n- Microsoft, \"DISC function\" —\n  <https://support.microsoft.com/en-us/office/disc-function-71fce9f3-3f05-4acf-a5a3-eac6ef4daa53>\n  (the basis table verbatim, and the companion quotation convention).\n- Handbook, [The value universe](../model/01-value-universe.md) and\n  [Coercion and lifting](../model/02-coercion-and-lifting.md).\n- Handbook projections `data/functions/FUNC.INTRATE.json` and `data/presence/FUNC.INTRATE.json`.\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.INTRATE.json).",
    "what-it-does": "\n`INTRATE(settlement, maturity, investment, redemption, [basis])` returns the **simple annualized\ninterest rate** for a fully invested security — one that pays nothing until maturity, when it pays\n`redemption` against an outlay of `investment`.\n\nWith `T` the year fraction from settlement to maturity under the chosen day-count `basis`:\n\n    INTRATE = (redemption − investment) / investment × 1/T\n\nIn Microsoft's notation, with `B` the basis year length in days and `DIM` the number of days from\nsettlement to maturity, `T = DIM/B` and\n\n    INTRATE = (redemption − investment) / investment × B / DIM\n\n**\"Fully invested\" is the definitional constraint**, and it means exactly one thing: there are no\nintermediate cash flows. Every coupon-bearing instrument is outside this function's model, and\n`INTRATE` will still return a number if you feed it one — a wrong number, computed correctly.\n\nThe rate is **simple, not compounded**. Over a span longer than a year, `INTRATE` returns the total\ngain divided by the number of years, with no reinvestment of interest at all. It is not comparable\nto an `EFFECT`-style annual equivalent and it is not `RRI`.\n\n### The pair with DISC\n\n`INTRATE` and [DISC](FUNC.DISC.md) describe the same trade and disagree about the denominator:\n\n| | Numerator | Denominator |\n|---|---|---|\n| `INTRATE` | `redemption − investment` | `investment` — what you paid |\n| `DISC` | `redemption − pr` | `redemption` — what you get back |\n\nSince `redemption > investment` for any security bought at a discount, `INTRATE > DISC` always, and\nthe gap widens with `T`. The exact conversions:\n\n    INTRATE = DISC / (1 − DISC·T)\n    DISC    = INTRATE / (1 + INTRATE·T)\n\nConfusing the two is the classic money-market quotation error. It is not a small error: on a\none-year instrument at a 10% discount rate the investment-side rate is about 11.1%.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `settlement` | The settlement date — when the security trades to the buyer. Required. | — |\n| `maturity` | The maturity date — when the security expires. Required. | — |\n| `investment` | The amount invested in the security. Required. | — |\n| `redemption` | The amount to be received at maturity. Required. | — |\n| `basis` | The day-count basis. Optional. | 0 |\n\nNote the argument-shape asymmetry with `DISC`, and it is easy to miss: `DISC` takes a **price per\n$100 face value**, while `INTRATE` takes an **amount invested**. Because both functions use their\ntwo money arguments only as a ratio, either scaling gives the same answer *provided both money\narguments use the same one* — but the documented meanings differ, and a formula that feeds a\nper-100 price to `INTRATE` alongside a raw redemption amount is silently wrong by four orders of\nmagnitude.\n\nThe documented day-count basis values are the standard five, identical to the table on the\n[DISC](FUNC.DISC.md) page: `0` or omitted = US (NASD) 30/360, `1` = Actual/actual, `2` =\nActual/360, `3` = Actual/365, `4` = European 30/360. Dates and `basis` are documented as truncated\nto integers.\n\nNumeric coercion of the argument slots follows the shared call model; see\n[Coercion and lifting](../model/02-coercion-and-lifting.md).\n\n\n"
  },
  "signature": {
    "display": "INTRATE(settlement, maturity, investment, redemption, [basis])",
    "parameters": [
      {
        "description": null,
        "name": "settlement",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "maturity",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "investment",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "redemption",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "basis",
        "optional": true,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 5,
        "min": 4
      },
      "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": "Interest rate of a security bought and redeemed at given amounts",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the interest rate for a fully invested security",
        "microsoft_url": "https://support.microsoft.com/en-us/office/intrate-function-5cb34dde-a221-4cb6-b3eb-0b9e55e1316f"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "INTRATE"
        },
        {
          "locale": "bg-BG",
          "name": "INTRATE"
        },
        {
          "locale": "cs-CZ",
          "name": "INTRATE"
        },
        {
          "locale": "da-DK",
          "name": "RENTEFOD"
        },
        {
          "locale": "de-DE",
          "name": "INTRATE"
        },
        {
          "locale": "el-GR",
          "name": "INTRATE"
        },
        {
          "locale": "en-AU",
          "name": "INTRATE"
        },
        {
          "locale": "en-GB",
          "name": "INTRATE"
        },
        {
          "locale": "en-US",
          "name": "INTRATE"
        },
        {
          "locale": "es-ES",
          "name": "TASA.INT"
        },
        {
          "locale": "et-EE",
          "name": "INTRATE"
        },
        {
          "locale": "fi-FI",
          "name": "KORKO.ARVOPAPERI"
        },
        {
          "locale": "fr-FR",
          "name": "TAUX.INTERET*"
        },
        {
          "locale": "he-IL",
          "name": "INTRATE"
        },
        {
          "locale": "hr-HR",
          "name": "INTRATE"
        },
        {
          "locale": "hu-HU",
          "name": "KAMATRÁTA"
        },
        {
          "locale": "id-ID",
          "name": "INTRATE"
        },
        {
          "locale": "it-IT",
          "name": "INTRATE"
        },
        {
          "locale": "ja-JP",
          "name": "INTRATE"
        },
        {
          "locale": "ko-KR",
          "name": "INTRATE"
        },
        {
          "locale": "lt-LT",
          "name": "INTRATE"
        },
        {
          "locale": "lv-LV",
          "name": "INTRATE"
        },
        {
          "locale": "nb-NO",
          "name": "RENTESATS"
        },
        {
          "locale": "nl-NL",
          "name": "RENTEPERCENTAGE"
        },
        {
          "locale": "pl-PL",
          "name": "STOPA.PROC"
        },
        {
          "locale": "pt-BR",
          "name": "INTRATE"
        },
        {
          "locale": "pt-PT",
          "name": "TAXAJUROS"
        },
        {
          "locale": "ro-RO",
          "name": "INTRATE"
        },
        {
          "locale": "ru-RU",
          "name": "ИНОРМА"
        },
        {
          "locale": "sk-SK",
          "name": "INTRATE"
        },
        {
          "locale": "sl-SI",
          "name": "INTRATE"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "INTRATE"
        },
        {
          "locale": "sv-SE",
          "name": "ÅRSRÄNTA"
        },
        {
          "locale": "th-TH",
          "name": "INTRATE"
        },
        {
          "locale": "tr-TR",
          "name": "FAİZORANI işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "INTRATE"
        },
        {
          "locale": "vi-VN",
          "name": "INTRATE"
        },
        {
          "locale": "zh-CN",
          "name": "INTRATE"
        },
        {
          "locale": "zh-HK",
          "name": "INTRATE"
        },
        {
          "locale": "zh-TW",
          "name": "INTRATE"
        }
      ],
      "signature": {
        "display": "INTRATE(settlement, maturity, investment, redemption, [basis])",
        "parameters": [
          {
            "description": null,
            "name": "settlement",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "maturity",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "investment",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "redemption",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "basis",
            "optional": true,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "INTRATE",
      "version_marker": null,
      "xlcall": {
        "code": "433",
        "symbol": "xlfIntrate"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/intrate-function-5cb34dde-a221-4cb6-b3eb-0b9e55e1316f"
  },
  "try_it": {
    "formula": "=INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0)"
  },
  "url": "https://handbook.dnacalc.com/functions/INTRATE.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0) returned -7.199885653133469 (0xc01cccaed31c9766). 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": "INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0)",
          "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"
        }
      ],
      "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.INTRATE.json"
      ]
    }
  ]
}