Excel 16.0 build 20131
Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics
105 captured inputs are indexed for this environment. Capture dates: 2026-07-11 to 2026-07-11. This is a reading count, not a comparison with another build.
Financial functions
Known larger differences on 416 of 470 recorded answers
Of 470 recorded answers (377 in the answer bank and 93 workbook cells), 416 do not match: 374 differ by more than 16 ULP, 20 differ by at most 16 ULP, 22 differ in kind or value. How we measure this · See the Rust code
| Language | Name in Excel |
|---|---|
| Arabic | RATE |
| Bulgarian | RATE |
| Czech | ÚROKOVÁ.MÍRA |
| Danish | RENTE |
| German | ZINS |
| Greek | RATE |
| English (Australia) | RATE |
| English (United Kingdom) | RATE |
| English (United States) | RATE |
| Spanish | TASA |
| Estonian | RATE |
| Finnish | KORKO |
| French | TAUX |
| Hebrew | RATE |
| Croatian | RATE |
| Hungarian | RÁTA |
| Indonesian | RATE |
| Italian | TASSO |
| Japanese | RATE |
| Korean | RATE |
| Lithuanian | RATE |
| Latvian | RATE |
| Norwegian | RENTE |
| Dutch | RENTE |
| Polish | RATE |
| Portuguese (Brazil) | TAXA |
| Portuguese (Portugal) | TAXA |
| Romanian | DIVERSE |
| Russian | СТАВКА |
| Slovak | RATE |
| Slovenian | RATE |
| Serbian (Latin) | RATE |
| Swedish | RÄNTA |
| Thai | RATE |
| Turkish | FAİZ_ORANI |
| Ukrainian | RATE |
| Vietnamese | RATE |
| Chinese (Simplified) | RATE |
| Chinese (Hong Kong) | RATE |
| Chinese (Traditional) | RATE |
Names from Microsoft's support site.
RATE(nper, pmt, pv, [fv], [type], [guess])
RATE(nper,pmt,pv,[fv],[type],[guess]) solves the periodic rate of a fixed-payment annuity. Future value defaults to zero, type zero pays at period end, and the documented default guess is 0.1.
=RATE(1,-1250,1000) is about 0.25. With one end-period payment the equation is 1000*(1+r)-1250=0, so r is one quarter. The output is per payment period, not automatically annual.
The equation may have no acceptable root or more than one root; guess and search behaviour can affect the answer. Nonconvergence gives #NUM! under the documented policy. A returned monthly rate times twelve is a nominal annual calculation, not a change of the function’s period units.
Microsoft describes convergence within 0.0000001 after at most twenty iterations. That is the public stopping description, not a specification of every step in the current alternative solver. Comparing the returned residual alone does not establish Excel's root-selection or stopping behavior.
The following is the current candidate’s algorithm, rather than an identified Excel iteration schedule. Its residual and stopping stages are distinct from PMT’s measured discount route.
With ordinary binary64 arithmetic, at abs(r)<1e-12 use F(r)=fv+pv+pmt*n. Otherwise obtain g=POWER(1+r,n) through the current growth helper, set timing=1 for end payments or 1+r for beginning payments, form term=timing*(g-1)/r, and evaluate F(r)=fv+pv*g+pmt*term in that association. Reject invalid growth or nonfinite results. This small-rate band belongs to the RATE residual; PMT’s exact-zero branch does not replace it.
(0,F(0)) and (guess,F(guess)), defaulting guess to 0.1. The current domain bound is -0.999999999; calls at or below it need the source’s explicit boundary/error handling.1e-7. If two successive residuals have opposite signs, bisect that endpoint pair for at most 64 steps, accepting the same residual threshold. After those steps the helper also accepts a bracket width at most 1e-12.next=r-F(r)*(r-prev)/(F(r)-F(prev)). If the residual difference’s magnitude is at most 1e-12, use a finite-difference Newton slope instead: h=max(abs(r),1)*1e-6, sample at max(r-h,domain_bound) and r+h, and divide the residual difference by the actual sample separation. A slope of magnitude at most 1e-12 fails.max(abs(guess),0.1) and double; negative probes move halfway from the current rate toward minus one. Each side has a limit of 64 probes, and a found sign change uses the bisection helper. Evaluation errors still propagate.A successful seed then gets up to sixty central-difference Newton refinements. Here the sampling width is h=max(abs(r),1e-4)*1e-6, distinct from the fallback width above. Stop at a stored-rate fixpoint, invalid next rate, failed residual or noncontracting step. At the latter boundary the source keeps whichever candidate has the smaller absolute residual.
For the one-period example, F(0) is minus 250 and F(0.1) minus 150. Their secant line reaches r=0.25, whose residual is zero. Longer or nearly flat problems need the remaining phases; a small currency residual alone does not guarantee a similarly small rate error.
The source retains a counterexample at RATE(360,-1073.64,200000): its polished result bits 0x3f71110b20485718 remain 55 representable steps below the recorded Excel target 0x3f71110b2048574f. Root selection, the residual’s arithmetic and Excel’s full stopping rules remain open. These candidate steps provide something concrete to implement and compare without claiming whole-function agreement.
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.
RATE · 5 lines · calc-func/src/catalogue/financial.rs on GitHub5 rate_fn "RATE" (3, 6) [V "nper", V "pmt", V "pv", V "fv", V "type", V "guess"] |s, a, sv| {
let t = timing(s, a, 4)?;
let g = if a.len() > 5 { Some(num(s, a, 5)?) } else { None };
tv_out(s, tv::rate(num(s, a, 0)?, num(s, a, 1)?, num(s, a, 2)?, opt(s, a, 3, 0.0)?, t, g))
}
tv_out catalogue/financialtiming catalogue/financialbackend::sqrt ported/excel_numericbinary_with ported/excel_numericexcel_pow_positive ported/excel_numericexcel_pow_chain ported/excel_numericexcel_x87_mul ported/excel_numericexcel_x87_recip ported/excel_numericmul ported/excel_numeric/x87recip 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_chainsPaymentTiming::factor ported/financial_time_value_familyvalidate_finite ported/financial_time_value_familygrowth ported/financial_time_value_familyannuity_term ported/financial_time_value_familybalance_equation ported/financial_time_value_familyvalues_bracket_root ported/financial_time_value_familybisect_rate_bracket ported/financial_time_value_familysearch_rate_bracket_from_zero ported/financial_time_value_familyrate ported/financial_time_value_familypolish_root ported/financial_time_value_familyrate_root ported/financial_time_value_familyexact_integer_magnitude ported/power_fnaccept_negative_base_odd_root ported/power_fnbinexp_positive ported/power_fnpower_kernel ported/power_fnNo 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 |
|---|---|---|
| 20131 | Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics | 105 |
| 20228 | Windows, 64-bit, CPU not recorded | 256 |
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, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics
105 captured inputs are indexed for this environment. Capture dates: 2026-07-11 to 2026-07-11. This is a reading count, not a comparison with another build.
Windows, 64-bit, CPU not recorded
256 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.
IRR accepts varying periodic flows; XIRR uses dates; PMT computes a payment for a supplied rate.
No named variants are recorded yet.
Suggest a correction or contribute an implementation · For agents