Excel 16.0 build 20228
Windows, 64-bit, CPU not recorded
1,030 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.
Financial functions
Matches all 2,588 recorded answers
Recorded: 2,584 in the answer bank and 4 workbook cells. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | الأثر |
| Bulgarian | EFFECT |
| Czech | EFFECT |
| Danish | EFFEKTIV.RENTE |
| German | EFFECT |
| Greek | EFFECT |
| English (Australia) | EFFECT |
| English (United Kingdom) | EFFECT |
| English (United States) | EFFECT |
| Spanish | INT.EFECTIVO |
| Estonian | EFFECT |
| Finnish | VAIKUTUS |
| French | TAUX.EFFECTIF |
| Hebrew | EFFECT |
| Croatian | EFFECT |
| Hungarian | TÉNYLEGES |
| Indonesian | EFFECT |
| Italian | EFFECT |
| Japanese | EFFECT |
| Korean | EFFECT |
| Lithuanian | EFFECT |
| Latvian | EFFECT |
| Norwegian | EFFEKTIV.RENTE |
| Dutch | EFFECT.RENTE |
| Polish | EFEKTYWNA |
| Portuguese (Brazil) | EFFECT |
| Portuguese (Portugal) | EFETIVA |
| Romanian | EFECT |
| Russian | ЭФФЕКТ |
| Slovak | ÚČINOK |
| Slovenian | EFFECT |
| Serbian (Latin) | EFEKAT |
| Swedish | EFFRÄNTA |
| Thai | EFFECT |
| Turkish | ETKİN işlevi |
| Ukrainian | EFFECT |
| Vietnamese | EFFECT |
| Chinese (Simplified) | EFFECT |
| Chinese (Hong Kong) | EFFECT |
| Chinese (Traditional) | EFFECT |
Names from Microsoft's support site.
EFFECT(nominal_rate, npery)
EFFECT(nominal_rate, npery) converts a nominal annual rate compounded npery times a year
into the effective annual rate — the single annual rate that produces the same year-end value
with one compounding.
EFFECT = (1 + nominal_rate/npery)^npery − 1
The identity behind it: growing at r/n per period for n periods multiplies principal by
(1 + r/n)^n, and the effective rate is that multiplier minus one. A 10% nominal rate compounded
monthly is not 10% a year — it is about 10.47%, and the gap is the whole reason the function
exists. Consumer-credit disclosure regimes worldwide are built on this conversion.
Domain and range: for nominal_rate > 0 and integer npery ≥ 1, EFFECT is strictly increasing in
npery and strictly greater than nominal_rate for every npery > 1. At npery = 1 it is
exactly nominal_rate.
The limiting case is the interesting one. As n → ∞,
(1 + r/n)^n → e^r so EFFECT → e^r − 1
which is continuous compounding. That limit is approached but never reached through this function,
because npery is truncated to an integer — there is no "continuous" setting. EXP(r) − 1 is the
formula for that, and EFFECT with a very large npery approximates it from below.
The function is not an annualization of a period rate in the simple-interest sense. EFFECT
compounds; INTRATE and DISC do not. Feeding a money-market discount quote to EFFECT produces
a number with no financial meaning.
| Argument | Meaning | Default |
|---|---|---|
nominal_rate | The nominal annual interest rate, as a decimal fraction. Required. | — |
npery | The number of compounding periods per year. Required. | — |
Two documented rules:
npery is truncated to an integer. npery = 12.9 compounds twelve times, not 12.9 times.npery must be at least 1 and nominal_rate must be greater than zero; both violations are
#NUM!.npery is not restricted to the conventional 1, 2, 4, 12 — 365 (daily) and 52 (weekly) are
accepted and are exactly what the function is for.
Returns Number — an effective annual rate as a decimal fraction.
npery = 1 returns nominal_rate — up to floating-point rounding. It is not guaranteed to
return the input's exact bits, because the computation still forms (1 + r)^1 − 1.nominal_rate ≤ 0 is an error, not a computation. This is a documented restriction, not a
mathematical boundary: (1 + r/n)^n − 1 is perfectly well defined for r = 0 (giving 0) and for
small negative r. Excel refuses both. A model that needs the effective rate of a zero or
negative nominal rate cannot use this function and must write the formula out.npery approaches EXP(nominal_rate) − 1 from below and stays finite; there is no
overflow for any realistic rate.npery truncates toward zero, so 0.9 becomes 0 and therefore #NUM!.As documented on Microsoft's EFFECT page:
| Error | Condition |
|---|---|
#VALUE! | nominal_rate or npery is non-numeric |
#NUM! | nominal_rate ≤ 0 or npery < 1 |
The formula (1 + r/n)^n − 1 is the textbook expression and it is the worst way to evaluate the
quantity when r/n is small.
Two error sources compound. First, 1 + r/n loses the low bits of r/n when the ratio is tiny —
for a 1% rate compounded daily, r/n ≈ 2.7×10⁻⁵, so roughly five significant digits of the input
are discarded in the addition. Second, the result of the power is close to 1, so the final
subtraction of 1 is a cancellation that exposes exactly those damaged bits. The two effects are
multiplicative in the relative error, and the damage grows with n.
The standard remedy is the expm1/log1p pair:
EFFECT = expm1(npery × log1p(nominal_rate/npery))
log1p computes ln(1 + x) accurately for small x without forming 1 + x, and expm1 computes
e^x − 1 without forming the intermediate that cancels. Together they hold full relative accuracy
across the whole admissible domain. This is the same pairing that appears throughout the annuity
functions in this family, and the standard reference treatment is in the fdlibm/Cody-and-Waite
lineage that every modern libm inherits.
The Handbook does not claim what Excel does internally for either function.
Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.
EFFECT · 3 lines · calc-func/src/catalogue/financial.rs on GitHub15 effect_fn "EFFECT" (2, 2) [V "nominal_rate", V "npery"] |s, a, sv| {
tv_out(s, tv::effect(num(s, a, 0)?, num(s, a, 1)?))
}
effect · 40 lines · calc-func/src/ported/financial_time_value_family.rs on GitHubpub fn effect(nominal_rate: f64, periods_per_year: f64) -> Result<f64, FinancialError> {
validate_finite(&[nominal_rate, periods_per_year])?;
let periods = periods_per_year.trunc();
if nominal_rate <= 0.0 || periods < 1.0 {
return Err(FinancialError::Num);
}
// W109 G6-12 / BUG-FUNC-043: EFFECT's integer power is LSB-first binary
// exponentiation, but it belongs to the legacy x87 spill-loop body class:
// EVERY accumulator multiply and squaring is RN53(RN64(a*b)). POWER's
// ordinary-f64 integer helper is therefore not interchangeable. The base
// wrapper is also x87-spilled (`1 + nominal/n`; four targeted add-rounding
// probes distinguish it 4/4). The loop is selected only while the truncated
// count is below `u32::MAX`; at and above that exact boundary Excel switches
// to the stored-base raw x87 LN/product/EXP chain. Banked grid 315/315;
// fresh blind grid 870/870; fresh boundary/extreme-domain battery 160/160.
let base = excel_x87_add(1.0, excel_x87_div(nominal_rate, periods));
let compounded = if periods < u32::MAX as f64 {
let mut exponent = periods as u32;
let mut accumulator = 1.0;
let mut factor = base;
while exponent > 0 {
if exponent & 1 == 1 {
accumulator = excel_x87_mul(accumulator, factor);
}
exponent >>= 1;
if exponent > 0 {
factor = excel_x87_mul(factor, factor);
}
}
accumulator
} else {
excel_pow_chain(base, periods)
};
let result = excel_x87_sub(compounded, 1.0);
if result.is_finite() {
Ok(result)
} else {
Err(FinancialError::Num)
}
}
tv_out catalogue/financialbinary_with ported/excel_numericexcel_pow_chain ported/excel_numericexcel_x87_add ported/excel_numericexcel_x87_sub ported/excel_numericexcel_x87_mul ported/excel_numericexcel_x87_div ported/excel_numericmul ported/excel_numeric/x87add ported/excel_numeric/x87sub ported/excel_numeric/x87div ported/excel_numeric/x87pow2_positive ported/excel_numeric/x87_chainspow2 ported/excel_numeric/x87_chainsexp_ext ported/excel_numeric/x87_chainsexp_with ported/excel_numeric/x87_chainsexcel_exp ported/excel_numeric/x87_chainslog_with ported/excel_numeric/x87_chainsexcel_log ported/excel_numeric/x87_chainsvalidate_finite ported/financial_time_value_familyNo implementation has been published with a Handbook test suite for this function.
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.
| Excel 16.0 build | Platform and CPU | Captured inputs |
|---|---|---|
| 20228 | Windows, 64-bit, CPU not recorded | 1,030 |
| 20430 | Windows, 64-bit, CPU not recorded | 1,235 |
The 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.
Recorded environments and comparison details.
Windows, 64-bit, CPU not recorded
1,030 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.
Windows, 64-bit, CPU not recorded
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.
NOMINAL(EFFECT(r, n), n) should return r
up to floating-point rounding, and the round trip is the natural self-test for both. The two
functions carry identical domain restrictions.RRI — the compound rate implied by a present value, a future value and a period count.
Where EFFECT translates a quoted rate between conventions, RRI extracts a rate from
observed values.FV / FVSCHEDULE — the growth these rates describe. FV(EFFECT(r,n), 1, 0, −P) and
FV(r/n, n, 0, −P) agree by construction; that agreement is the definition of the effective
rate, and it makes a good check.EXP — the continuous-compounding limit, EXP(r) − 1, which EFFECT approaches as npery
grows and never reaches.XIRR / IRR — internal rates of return, which are already effective rates over their own
period; do not pass them through EFFECT a second time.EFFECT maps APR to APY. Which of the two
a jurisdiction requires you to disclose is a legal question, not a spreadsheet one.No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents