100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -5.972711572932587 \cdot 10^{-05}:\\
\;\;\;\;\frac{\mathsf{fma}\left(100, e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, -100\right)}{i} \cdot n\\
\mathbf{elif}\;i \le 0.07870893021680746:\\
\;\;\;\;\frac{\mathsf{fma}\left(i, 100, \left(i \cdot i\right) \cdot \left(i \cdot \frac{50}{3} + 50\right)\right)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\frac{n}{i} \cdot \left(\left(\mathsf{fma}\left(50, \left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right), \mathsf{fma}\left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log i, \frac{50}{3}, \mathsf{fma}\left(100, n \cdot \log i, \mathsf{fma}\left(\left(n \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right) \cdot \log i, 50, \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot 50\right)\right)\right)\right) - \left(\mathsf{fma}\left(\left(\log i \cdot \left(n \cdot n\right)\right) \cdot \log n, 100, \frac{50}{3} \cdot \left(\left(\log n \cdot n\right) \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right)\right) + \frac{100}{3} \cdot \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log n\right)\right)\right) - \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \frac{50}{3} + 100 \cdot n\right) \cdot \log n\right)\\
\end{array}double f(double i, double n) {
double r5202410 = 100.0;
double r5202411 = 1.0;
double r5202412 = i;
double r5202413 = n;
double r5202414 = r5202412 / r5202413;
double r5202415 = r5202411 + r5202414;
double r5202416 = pow(r5202415, r5202413);
double r5202417 = r5202416 - r5202411;
double r5202418 = r5202417 / r5202414;
double r5202419 = r5202410 * r5202418;
return r5202419;
}
double f(double i, double n) {
double r5202420 = i;
double r5202421 = -5.972711572932587e-05;
bool r5202422 = r5202420 <= r5202421;
double r5202423 = 100.0;
double r5202424 = n;
double r5202425 = r5202420 / r5202424;
double r5202426 = log1p(r5202425);
double r5202427 = r5202426 * r5202424;
double r5202428 = exp(r5202427);
double r5202429 = -100.0;
double r5202430 = fma(r5202423, r5202428, r5202429);
double r5202431 = r5202430 / r5202420;
double r5202432 = r5202431 * r5202424;
double r5202433 = 0.07870893021680746;
bool r5202434 = r5202420 <= r5202433;
double r5202435 = r5202420 * r5202420;
double r5202436 = 16.666666666666668;
double r5202437 = r5202420 * r5202436;
double r5202438 = 50.0;
double r5202439 = r5202437 + r5202438;
double r5202440 = r5202435 * r5202439;
double r5202441 = fma(r5202420, r5202423, r5202440);
double r5202442 = r5202441 / r5202425;
double r5202443 = r5202424 / r5202420;
double r5202444 = log(r5202424);
double r5202445 = r5202444 * r5202424;
double r5202446 = r5202445 * r5202445;
double r5202447 = log(r5202420);
double r5202448 = r5202424 * r5202447;
double r5202449 = r5202448 * r5202448;
double r5202450 = r5202449 * r5202424;
double r5202451 = r5202450 * r5202447;
double r5202452 = r5202424 * r5202446;
double r5202453 = r5202452 * r5202447;
double r5202454 = r5202449 * r5202438;
double r5202455 = fma(r5202453, r5202438, r5202454);
double r5202456 = fma(r5202423, r5202448, r5202455);
double r5202457 = fma(r5202451, r5202436, r5202456);
double r5202458 = fma(r5202438, r5202446, r5202457);
double r5202459 = r5202424 * r5202424;
double r5202460 = r5202447 * r5202459;
double r5202461 = r5202460 * r5202444;
double r5202462 = r5202445 * r5202446;
double r5202463 = r5202436 * r5202462;
double r5202464 = fma(r5202461, r5202423, r5202463);
double r5202465 = 33.333333333333336;
double r5202466 = r5202450 * r5202444;
double r5202467 = r5202465 * r5202466;
double r5202468 = r5202464 + r5202467;
double r5202469 = r5202458 - r5202468;
double r5202470 = r5202450 * r5202436;
double r5202471 = r5202423 * r5202424;
double r5202472 = r5202470 + r5202471;
double r5202473 = r5202472 * r5202444;
double r5202474 = r5202469 - r5202473;
double r5202475 = r5202443 * r5202474;
double r5202476 = r5202434 ? r5202442 : r5202475;
double r5202477 = r5202422 ? r5202432 : r5202476;
return r5202477;
}




Bits error versus i




Bits error versus n
| Original | 42.1 |
|---|---|
| Target | 41.8 |
| Herbie | 24.8 |
if i < -5.972711572932587e-05Initial program 28.3
Simplified28.2
rmApplied add-exp-log28.3
Applied pow-exp28.3
Simplified5.4
rmApplied associate-/r/6.0
if -5.972711572932587e-05 < i < 0.07870893021680746Initial program 49.9
Simplified49.9
Taylor expanded around 0 32.7
Simplified32.7
if 0.07870893021680746 < i Initial program 30.1
Simplified30.1
rmApplied add-exp-log49.4
Applied pow-exp49.4
Simplified48.6
rmApplied div-inv48.6
Simplified48.6
Taylor expanded around 0 21.2
Simplified21.2
Final simplification24.8
herbie shell --seed 2019162 +o rules:numerics
(FPCore (i n)
:name "Compound Interest"
:herbie-target
(* 100 (/ (- (exp (* n (if (== (+ 1 (/ i n)) 1) (/ i n) (/ (* (/ i n) (log (+ 1 (/ i n)))) (- (+ (/ i n) 1) 1))))) 1) (/ i n)))
(* 100 (/ (- (pow (+ 1 (/ i n)) n) 1) (/ i n))))