100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -3.143171245412234223671663589649849512853 \cdot 10^{-8}:\\
\;\;\;\;\frac{100 \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le -6.202175580399479749610806763177730589725 \cdot 10^{-257}:\\
\;\;\;\;100 \cdot \frac{\mathsf{fma}\left(1, i, \mathsf{fma}\left(0.5, {i}^{2}, \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 1.789886679054524215845529450016829481257 \cdot 10^{-195}:\\
\;\;\;\;100 \cdot \left(\frac{\frac{1}{\sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)} \cdot \sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}}}{\sqrt[3]{i} \cdot \sqrt[3]{i}} \cdot \left(\frac{\frac{{\left(1 + \frac{i}{n}\right)}^{\left(4 \cdot n\right)} - 1 \cdot {1}^{3}}{\left({\left(1 + \frac{i}{n}\right)}^{n} + 1\right) \cdot \sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}}}{\sqrt[3]{i}} \cdot n\right)\right)\\
\mathbf{elif}\;i \le 85896130569.3759002685546875:\\
\;\;\;\;100 \cdot \frac{\mathsf{fma}\left(1, i, \mathsf{fma}\left(0.5, {i}^{2}, \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \left(\frac{\frac{{\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}} - \frac{\frac{1 \cdot 1}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\right)\\
\end{array}double f(double i, double n) {
double r240486 = 100.0;
double r240487 = 1.0;
double r240488 = i;
double r240489 = n;
double r240490 = r240488 / r240489;
double r240491 = r240487 + r240490;
double r240492 = pow(r240491, r240489);
double r240493 = r240492 - r240487;
double r240494 = r240493 / r240490;
double r240495 = r240486 * r240494;
return r240495;
}
double f(double i, double n) {
double r240496 = i;
double r240497 = -3.143171245412234e-08;
bool r240498 = r240496 <= r240497;
double r240499 = 100.0;
double r240500 = n;
double r240501 = r240496 / r240500;
double r240502 = pow(r240501, r240500);
double r240503 = 1.0;
double r240504 = r240502 - r240503;
double r240505 = r240499 * r240504;
double r240506 = r240505 / r240501;
double r240507 = -6.20217558039948e-257;
bool r240508 = r240496 <= r240507;
double r240509 = 0.5;
double r240510 = 2.0;
double r240511 = pow(r240496, r240510);
double r240512 = log(r240503);
double r240513 = r240512 * r240500;
double r240514 = fma(r240509, r240511, r240513);
double r240515 = fma(r240503, r240496, r240514);
double r240516 = r240511 * r240512;
double r240517 = r240509 * r240516;
double r240518 = r240515 - r240517;
double r240519 = r240518 / r240501;
double r240520 = r240499 * r240519;
double r240521 = 1.7898866790545242e-195;
bool r240522 = r240496 <= r240521;
double r240523 = 1.0;
double r240524 = r240503 + r240501;
double r240525 = r240510 * r240500;
double r240526 = pow(r240524, r240525);
double r240527 = fma(r240503, r240503, r240526);
double r240528 = cbrt(r240527);
double r240529 = r240528 * r240528;
double r240530 = r240523 / r240529;
double r240531 = cbrt(r240496);
double r240532 = r240531 * r240531;
double r240533 = r240530 / r240532;
double r240534 = 4.0;
double r240535 = r240534 * r240500;
double r240536 = pow(r240524, r240535);
double r240537 = 3.0;
double r240538 = pow(r240503, r240537);
double r240539 = r240503 * r240538;
double r240540 = r240536 - r240539;
double r240541 = pow(r240524, r240500);
double r240542 = r240541 + r240503;
double r240543 = r240542 * r240528;
double r240544 = r240540 / r240543;
double r240545 = r240544 / r240531;
double r240546 = r240545 * r240500;
double r240547 = r240533 * r240546;
double r240548 = r240499 * r240547;
double r240549 = 85896130569.3759;
bool r240550 = r240496 <= r240549;
double r240551 = r240526 / r240542;
double r240552 = r240551 / r240501;
double r240553 = r240503 * r240503;
double r240554 = r240553 / r240542;
double r240555 = r240554 / r240501;
double r240556 = r240552 - r240555;
double r240557 = r240499 * r240556;
double r240558 = r240550 ? r240520 : r240557;
double r240559 = r240522 ? r240548 : r240558;
double r240560 = r240508 ? r240520 : r240559;
double r240561 = r240498 ? r240506 : r240560;
return r240561;
}




Bits error versus i




Bits error versus n
| Original | 42.5 |
|---|---|
| Target | 42.4 |
| Herbie | 31.3 |
if i < -3.143171245412234e-08Initial program 27.6
Taylor expanded around inf 64.0
Simplified19.0
if -3.143171245412234e-08 < i < -6.20217558039948e-257 or 1.7898866790545242e-195 < i < 85896130569.3759Initial program 51.1
Taylor expanded around 0 31.2
Simplified31.2
if -6.20217558039948e-257 < i < 1.7898866790545242e-195Initial program 48.7
rmApplied flip--48.7
Simplified48.7
rmApplied flip--48.7
Simplified48.7
Simplified48.7
rmApplied *-un-lft-identity48.7
Applied add-cube-cbrt48.7
Applied times-frac48.7
Applied *-un-lft-identity48.7
Applied add-cube-cbrt48.7
Applied *-un-lft-identity48.7
Applied times-frac48.7
Applied times-frac48.7
Applied times-frac48.3
Simplified48.3
Simplified48.1
if 85896130569.3759 < i Initial program 30.6
rmApplied flip--30.6
Simplified30.6
rmApplied div-sub30.6
Applied div-sub30.6
Final simplification31.3
herbie shell --seed 2019303 +o rules:numerics
(FPCore (i n)
:name "Compound Interest"
:precision binary64
: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))))