IRR Function (Calligra Sheets)
Find a periodic internal rate with Calligra IRR. Reproduce the discounted-cash-flow root, test the guess and understand convergence and input-conversion limits.
Verification status: 20 selected formulas were executed through the Calligra Sheets 25.04.2 calculation engine library. Exact outputs, mathematical references and source limitations are documented separately. Version 26.08.2 was source-checked only; no GUI-cell or import claim. How formula examples are checked
Convergence caution: the tested 25.04.2 engine returned numeric Infinity or NaN for several unsuitable cash-flow sequences, without setting its error flag. The source returns its last iterate without a residual-based success check.
Quick answer: =IRR({-1000;200;300;400;500}) gives approximately 0.128257269002 in the tested Calligra calculation engine.
Availability and version history
- Introduced: First release not established; the name is present in Calligra 25.04.2 source.
- Supported in: Calligra Sheets 26.08.2, with no retirement established.
- Scope: Desktop Sheets with the Financial module. Examples use English semicolon-separated formulas.
- Checked: October 14, 2026. Selected formulas ran through the official 25.04.2 engine library. Source and independent mathematics were checked. This is engine evidence, with no GUI-cell or import verification; 26.08.2 was source-checked only.
What IRR returns
IRR seeks a rate r satisfying cashFlow0+cashFlow1/(1+r)+…=0. The first supplied cash flow is at time zero, unlike NPV’s first discounted position. The returned decimal is a rate per equal cash-flow interval. Function-specific official reference.
Syntax and arguments
=IRR(values[;guess])
The ordered cash-flow range or array is required. Guess is optional and defaults to 0.1. A meaningful ordinary example includes both negative and positive cash flows. Dates and unequal intervals are not arguments of this function. Brackets indicate optional arguments and are not entered in the formula. Registration and implementation.
Reproducible engine examples
The engine and mathematical columns are separate. Results are rounded to twelve decimal places, or thirteen significant digits in scientific notation for very small or large values. This is a display choice, not an accuracy guarantee. Inline arrays in braces are formula values, not a workbook-import test. Their semicolons separate columns and vertical bars separate rows. Strings remain explicitly quoted, and booleans use TRUE()/FALSE().
| Formula | Engine result | Independent mathematical reference |
|---|---|---|
=IRR({-1000;200;300;400;500}) |
0.128257269002 |
0.128257269002 |
=IRR({-1000;200;300;400;500};.05) |
0.128257269002 |
0.128257269002 |
=IRR({-1000;200;300;400;500};.2) |
0.128257269002 |
0.128257269002 |
=IRR({-1000;0;0;0;1500}) |
0.1066819197 |
0.1066819197 |
=IRR({-1000;-100;300;500;700}) |
0.103470730417 |
0.103470730417 |
=IRR({-1000;1100}) |
0.1 |
0.1 |
=IRR({-1000;400;400;400}) |
0.097010257403 |
0.097010257403 |
=IRR({-100;0;121}) |
0.1 |
0.1 |
Practical worksheet
For {-1000;200;300;400;500}, the result is approximately 0.128257269002, or 12.8257269002% per period. Substituting that rate into the independently stated time-zero equation leaves a residual close to zero.
The examples with guesses 0.05 and 0.2 converge to the same ordinary root within stored rounding. That agreement is useful for this sequence; it does not establish that every sequence has one root or that every initial guess converges. Multiple sign changes can give multiple roots or no suitable root.
Advanced interpretation and checks
The source uses Newton updates with an analytic derivative, at most 50 iterations, and a 1e−10 rate-change threshold. Its continuation also tests the absolute rate, so an iterate near zero can end the loop without a separate residual test.
For {-100;0;121}, the independent root is 0.1 because −100+121/1.1^2=0. The executed NPV check below discounts every term one extra interval; that is a scaled version of the same zero equation when r≠−1. Its small retained residual supports this specific computed root, not a universal convergence certificate.
The executed advanced check was:
=NPV(IRR({-1000;200;300;400;500});{-1000;200;300;400;500})
Its engine result was -1.409705685518E-13.
Boundaries and troubleshooting
All-positive, all-negative, all-zero, scalar-only and guess −1 probes produced nonfinite numeric outputs. These are engine-library observations, not ordinary percentage returns or claims about GUI display. Validate finite output and evaluate the discounted-cash-flow residual separately.
Numeric strings in the tested sequence are parsed; nonnumeric text and embedded errors become zero, retaining their periods. TRUE becomes one. Such conversion can silently change a model even when a root is finite. Wrong arity gives #VALUE!. Keep ordered numeric flows and inspect their signs before calling the solver.
| Formula | Engine result |
|---|---|
=IRR({100;200}) |
−Infinity |
=IRR({-100;-200}) |
+Infinity |
=IRR({0;0}) |
NaN |
=IRR({-1000;"200";300;400;500}) |
0.128257269002 |
=IRR({-1000;"abc";300;400;500}) |
0.059625042537 |
=IRR({-1000;TRUE();300;400;500}) |
0.059944703181 |
=IRR({-1000;1/0;300;400;500}) |
0.059625042537 |
=IRR({-1000;1100};-1) |
NaN |
=IRR(-1000) |
+Infinity |
=IRR() |
#VALUE! |
=IRR({-100;200};.1;0) |
#VALUE! |
Official evidence and precision scope
- Function-specific implementation
- Versioned function help
- Irr Objective And Derivative helper
- Conversion helper
The financial module and value-calculation helpers are byte-identical between the inspected 25.04.2 and 26.08.2 sources. That comparison supports the source discussion but does not establish later-version execution, GUI-cell behavior or other locales.