{
  "category": "Financial functions",
  "display_name": "NOMINAL",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.NOMINAL",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20228",
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 2085,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 2085,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 2,085 in the answer bank and 9 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 2,094 recorded answers",
    "workbook_corpus": {
      "cells": 9,
      "matched": 9
    }
  },
  "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/financial.rs#L216-L218",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/financial_time_value_family.rs#L1193-L1219"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/financial::tv_out",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_pow_chain",
        "ported/excel_numeric::excel_x87_add",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::add",
        "ported/excel_numeric/x87_chains::pow2_positive",
        "ported/excel_numeric/x87_chains::pow2",
        "ported/excel_numeric/x87_chains::exp_ext",
        "ported/excel_numeric/x87_chains::exp_with",
        "ported/excel_numeric/x87_chains::excel_exp",
        "ported/excel_numeric/x87_chains::log_with",
        "ported/excel_numeric/x87_chains::excel_log",
        "ported/financial_time_value_family::validate_finite"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/financial.rs#L216-L218",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 2,094 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.NOMINAL.json",
  "name": "NOMINAL",
  "notes": [],
  "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- **[EFFECT](FUNC.EFFECT.md)** — the exact inverse. The two carry identical arguments, identical\n  domain restrictions and identical error conditions; only the direction differs. Round-tripping\n  through both is the natural self-test.\n- **`LN`** — the continuous limit, `LN(1 + effect_rate)`, which `NOMINAL` approaches as `npery`\n  grows.\n- **`RRI`** — the compound rate implied by observed values rather than translated from a quote.\n  `RRI(npery, 1, 1 + effect_rate)` computes exactly the per-period rate `NOMINAL` divides out,\n  which makes it an independent route to the same intermediate.\n- **`RATE`** — the annuity solver. Unrelated in mechanism (`RATE` iterates, `NOMINAL` is closed\n  form) but frequently confused because both return \"a rate\".\n- **Confused with**: APR versus APY. `NOMINAL` maps APY back to APR. Which one a disclosure regime\n  requires is a legal question.\n- **`FV` / `PMT` / `PV`** — the annuity functions consume a *periodic* rate. `NOMINAL(e, 12)/12`,\n  not `NOMINAL(e, 12)`, is what belongs in a monthly `FV` call. Passing the annual nominal rate to a\n  monthly annuity is one of the most common financial-modelling errors in spreadsheets, and no\n  function in the family can detect it.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\nThe evaluation `npery × ((1 + effect_rate)^(1/npery) − 1)` has a cancellation problem that is worse\nthan `EFFECT`'s, because the root extraction drives the intermediate toward 1 as `npery` grows.\n\nFor a 5% effective rate compounded daily, `(1.05)^(1/365) ≈ 1.000133...`, and subtracting 1 from a\nvalue that close to 1 discards roughly four significant decimal digits before the multiplication by\n365 restores the magnitude. The relative error of the answer is the relative error of the\nsubtraction, and no amount of care in the multiplication recovers it. The larger `npery` is — that\nis, the closer the function gets to its continuous limit — the more accuracy the naive form loses.\n\nThe stable form uses the same primitive pair as the rest of this family:\n\n    NOMINAL = npery × expm1( log1p(effect_rate) / npery )\n\n`log1p` computes `ln(1 + e)` without forming `1 + e`, and `expm1` computes `e^x − 1` without forming\nthe near-1 intermediate that cancels. This holds full relative accuracy for every admissible\n`npery`, and it makes the continuous limit visible directly: as `npery → ∞`, `npery·expm1(L/npery)`\n→ `L = log1p(effect_rate)`. The `expm1`/`log1p` treatment descends from the `fdlibm` lineage that\nmodern libms inherit.\n\n1. It calls the **plain floating-point power**, whereas its inverse `EFFECT` calls the worksheet\n   `POWER` kernel. Two functions that are exact inverses of one another routed through different\n   power implementations will not round-trip cleanly, and the discrepancy will look like noise\n   rather than like a bug.\n2. The exponent is formed as `1.0/npery`, which is inexact for every `npery` that is not a power of\n   two — so `npery = 12` and `npery = 365` both introduce a rounding before the power is even\n   evaluated.\n\nThe Handbook does not claim what Excel does internally.\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number` — a nominal annual rate as a decimal fraction.\n\n- **`npery = 1`** returns `effect_rate`, up to floating-point rounding; the computation still forms\n  `(1 + e)^1 − 1` rather than short-circuiting, so exact bit recovery is not guaranteed.\n- **`effect_rate ≤ 0` is an error, not a computation.** As with `EFFECT`, this is a *documented\n  restriction* rather than a mathematical one: the expression is well defined at `e = 0` (giving 0)\n  and for small negative `e`. Excel refuses both. Negative-rate environments therefore need the\n  formula written out.\n- **Large `npery`** approaches `LN(1 + effect_rate)` from above and stays finite.\n- **Non-integer `npery`** truncates toward zero, so `0.9` becomes `0` and is `#NUM!`.\n- Empty, missing and error arguments follow the shared call model; see\n  [The value universe](../model/01-value-universe.md) and\n  [Coercion and lifting](../model/02-coercion-and-lifting.md).\n\n\n\n### Errors\n\n\nAs documented on Microsoft's `NOMINAL` page:\n\n| Error | Condition |\n|---|---|\n| `#VALUE!` | `effect_rate` or `npery` is non-numeric |\n| `#NUM!` | `effect_rate ≤ 0` or `npery < 1` |\n\n",
    "sources": "- Microsoft, \"NOMINAL function\" —\n  <https://support.microsoft.com/en-us/office/nominal-function-7f1ae29b-6b92-435e-b950-ad8b190ddd2b>\n  (syntax, argument meanings, the truncation of `npery`, the equation, and the documented `#VALUE!`\n  and `#NUM!` conditions).\n- Handbook, [EFFECT](FUNC.EFFECT.md) — the inverse conversion, the shared domain restrictions and\n  the companion numerical discussion.\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.NOMINAL.json` and `data/presence/FUNC.NOMINAL.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| 20228 | Windows, 64-bit, CPU not recorded | 852 |\n| 20430 | Windows, 64-bit, CPU not recorded | 1,235 |\n\n- XC-NOMINAL-001: build 20228 versus build 20430; 2 same-input pairs, 0 differing answers. Compared axes: excel-build. Numeric answers were compared by their recorded binary64 bits; other answers by typed value.\n\nAgreement on these compared inputs does not establish agreement on unmeasured inputs.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.NOMINAL.json).",
    "what-it-does": "\n`NOMINAL(effect_rate, npery)` converts an **effective annual rate** into the **nominal annual rate\ncompounded `npery` times a year** that would produce it.\n\n    NOMINAL = npery × ( (1 + effect_rate)^(1/npery) − 1 )\n\nThe construction reads directly: `(1 + effect_rate)^(1/npery)` is the per-period growth factor whose\n`npery`-fold repetition gives one year's growth; subtracting 1 turns it into a per-period rate; and\nmultiplying by `npery` restates it as an annual figure by the nominal convention — that is, by\nsimple multiplication, ignoring the compounding it has just accounted for. That deliberate\ninconsistency *is* the nominal convention, and it is why nominal rates are always at or below their\neffective counterparts.\n\n`NOMINAL` is the exact inverse of [EFFECT](FUNC.EFFECT.md):\n\n    NOMINAL(EFFECT(r, n), n) = r        and        EFFECT(NOMINAL(e, n), n) = e\n\nin exact arithmetic. In binary64 the round trip is accurate but not bitwise idempotent; see\n*Numerical notes*.\n\nDomain and range: for `effect_rate > 0` and integer `npery ≥ 1`, the result is positive, strictly\nless than `effect_rate` for every `npery > 1`, and strictly decreasing in `npery`. At `npery = 1`\nit equals `effect_rate`.\n\nThe limit as `npery → ∞` is `ln(1 + effect_rate)` — the continuously-compounded equivalent, the\nforce of interest. As with `EFFECT`, that limit is approached and never reached, because `npery` is\ntruncated to an integer.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `effect_rate` | The effective annual interest rate, as a decimal fraction. Required. | — |\n| `npery` | The number of compounding periods per year. Required. | — |\n\nTwo documented rules, identical to `EFFECT`'s:\n\n1. **`npery` is truncated to an integer.**\n2. **`npery` must be at least 1** and `effect_rate` must be greater than zero; both violations are\n   `#NUM!`.\n\n`npery` is not restricted to the conventional 1, 2, 4, 12; weekly (52) and daily (365) are ordinary\ninputs.\n\n"
  },
  "signature": {
    "display": "NOMINAL(effect_rate, npery)",
    "parameters": [
      {
        "description": null,
        "name": "effect_rate",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "npery",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "category": "Financial functions",
      "classification": {
        "arg_preparation_profile": "RefsVisibleInAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Nominal annual rate from an effective rate and the compounding periods per year",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the annual nominal interest rate",
        "microsoft_url": "https://support.microsoft.com/en-us/office/nominal-function-7f1ae29b-6b92-435e-b950-ad8b190ddd2b"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "NOMINAL"
        },
        {
          "locale": "bg-BG",
          "name": "NOMINAL"
        },
        {
          "locale": "cs-CZ",
          "name": "NOMINAL"
        },
        {
          "locale": "da-DK",
          "name": "NOMINEL"
        },
        {
          "locale": "de-DE",
          "name": "NOMINAL"
        },
        {
          "locale": "el-GR",
          "name": "NOMINAL"
        },
        {
          "locale": "en-AU",
          "name": "NOMINAL"
        },
        {
          "locale": "en-GB",
          "name": "NOMINAL"
        },
        {
          "locale": "en-US",
          "name": "NOMINAL"
        },
        {
          "locale": "es-ES",
          "name": "TASA.NOMINAL"
        },
        {
          "locale": "et-EE",
          "name": "NOMINAL"
        },
        {
          "locale": "fi-FI",
          "name": "KORKO.VUOSI"
        },
        {
          "locale": "fr-FR",
          "name": "TAUX.NOMINAL*"
        },
        {
          "locale": "he-IL",
          "name": "NOMINAL"
        },
        {
          "locale": "hr-HR",
          "name": "NOMINAL"
        },
        {
          "locale": "hu-HU",
          "name": "NÉVLEGES"
        },
        {
          "locale": "id-ID",
          "name": "NOMINAL"
        },
        {
          "locale": "it-IT",
          "name": "NOMINAL"
        },
        {
          "locale": "ja-JP",
          "name": "NOMINAL"
        },
        {
          "locale": "ko-KR",
          "name": "NOMINAL"
        },
        {
          "locale": "lt-LT",
          "name": "NOMINAL"
        },
        {
          "locale": "lv-LV",
          "name": "NOMINAL"
        },
        {
          "locale": "nb-NO",
          "name": "NOMINAL"
        },
        {
          "locale": "nl-NL",
          "name": "NOMINALE.RENTE"
        },
        {
          "locale": "pl-PL",
          "name": "NOMINALNA"
        },
        {
          "locale": "pt-BR",
          "name": "NOMINAL"
        },
        {
          "locale": "pt-PT",
          "name": "NOMINAL"
        },
        {
          "locale": "ro-RO",
          "name": "NOMINAL"
        },
        {
          "locale": "ru-RU",
          "name": "НОМИНАЛ"
        },
        {
          "locale": "sk-SK",
          "name": "NOMINAL"
        },
        {
          "locale": "sl-SI",
          "name": "NOMINAL"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "NOMINAL"
        },
        {
          "locale": "sv-SE",
          "name": "NOMRÄNTA"
        },
        {
          "locale": "th-TH",
          "name": "NOMINAL"
        },
        {
          "locale": "tr-TR",
          "name": "NOMİNAL işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "NOMINAL"
        },
        {
          "locale": "vi-VN",
          "name": "NOMINAL"
        },
        {
          "locale": "zh-CN",
          "name": "NOMINAL"
        },
        {
          "locale": "zh-HK",
          "name": "NOMINAL"
        },
        {
          "locale": "zh-TW",
          "name": "NOMINAL"
        }
      ],
      "signature": {
        "display": "NOMINAL(effect_rate, npery)",
        "parameters": [
          {
            "description": null,
            "name": "effect_rate",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "npery",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "NOMINAL",
      "version_marker": null,
      "xlcall": {
        "code": "445",
        "symbol": "xlfNominal"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/nominal-function-7f1ae29b-6b92-435e-b950-ad8b190ddd2b"
  },
  "try_it": {
    "formula": "=NOMINAL(0.05, 365)"
  },
  "url": "https://handbook.dnacalc.com/functions/NOMINAL.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "852 captured inputs are indexed for this environment. Capture dates: 2026-08-09 to 2026-08-09. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20228",
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.NOMINAL.json"
      ]
    },
    {
      "behaviour": "1,235 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.NOMINAL.json"
      ]
    }
  ]
}