100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -1.8984797370362623:\\
\;\;\;\;\left(\frac{n}{i} \cdot \left({\left(\frac{1}{\frac{n}{i}}\right)}^{n} - 1\right)\right) \cdot 100\\
\mathbf{elif}\;i \le 1.1173760773735925 \cdot 10^{-241}:\\
\;\;\;\;100 \cdot \left(n + n \cdot \left(\frac{1}{2} \cdot i + \left(i \cdot i\right) \cdot \left(\left(i \cdot \frac{5}{216} + \frac{1}{6}\right) + \left(i \cdot i\right) \cdot \frac{1}{432}\right)\right)\right)\\
\mathbf{elif}\;i \le 3.8569470324880954 \cdot 10^{-10}:\\
\;\;\;\;100 \cdot \left(\frac{1}{i} \cdot \left(n \cdot \left(i + i \cdot \left(i \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot i\right)\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;0\\
\end{array}double f(double i, double n) {
double r44389488 = 100.0;
double r44389489 = 1.0;
double r44389490 = i;
double r44389491 = n;
double r44389492 = r44389490 / r44389491;
double r44389493 = r44389489 + r44389492;
double r44389494 = pow(r44389493, r44389491);
double r44389495 = r44389494 - r44389489;
double r44389496 = r44389495 / r44389492;
double r44389497 = r44389488 * r44389496;
return r44389497;
}
double f(double i, double n) {
double r44389498 = i;
double r44389499 = -1.8984797370362623;
bool r44389500 = r44389498 <= r44389499;
double r44389501 = n;
double r44389502 = r44389501 / r44389498;
double r44389503 = 1.0;
double r44389504 = r44389503 / r44389502;
double r44389505 = pow(r44389504, r44389501);
double r44389506 = r44389505 - r44389503;
double r44389507 = r44389502 * r44389506;
double r44389508 = 100.0;
double r44389509 = r44389507 * r44389508;
double r44389510 = 1.1173760773735925e-241;
bool r44389511 = r44389498 <= r44389510;
double r44389512 = 0.5;
double r44389513 = r44389512 * r44389498;
double r44389514 = r44389498 * r44389498;
double r44389515 = 0.023148148148148147;
double r44389516 = r44389498 * r44389515;
double r44389517 = 0.16666666666666666;
double r44389518 = r44389516 + r44389517;
double r44389519 = 0.0023148148148148147;
double r44389520 = r44389514 * r44389519;
double r44389521 = r44389518 + r44389520;
double r44389522 = r44389514 * r44389521;
double r44389523 = r44389513 + r44389522;
double r44389524 = r44389501 * r44389523;
double r44389525 = r44389501 + r44389524;
double r44389526 = r44389508 * r44389525;
double r44389527 = 3.8569470324880954e-10;
bool r44389528 = r44389498 <= r44389527;
double r44389529 = r44389503 / r44389498;
double r44389530 = r44389517 * r44389498;
double r44389531 = r44389512 + r44389530;
double r44389532 = r44389498 * r44389531;
double r44389533 = r44389498 * r44389532;
double r44389534 = r44389498 + r44389533;
double r44389535 = r44389501 * r44389534;
double r44389536 = r44389529 * r44389535;
double r44389537 = r44389508 * r44389536;
double r44389538 = 0.0;
double r44389539 = r44389528 ? r44389537 : r44389538;
double r44389540 = r44389511 ? r44389526 : r44389539;
double r44389541 = r44389500 ? r44389509 : r44389540;
return r44389541;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.5 |
|---|---|
| Target | 42.3 |
| Herbie | 18.8 |
if i < -1.8984797370362623Initial program 27.7
Taylor expanded around inf 62.9
Simplified19.0
if -1.8984797370362623 < i < 1.1173760773735925e-241Initial program 49.4
Taylor expanded around 0 34.6
Simplified34.6
rmApplied div-inv34.6
Applied add-cube-cbrt35.1
Applied times-frac17.5
Taylor expanded around 0 54.6
Simplified17.1
Taylor expanded around 0 17.0
Simplified17.0
if 1.1173760773735925e-241 < i < 3.8569470324880954e-10Initial program 51.4
Taylor expanded around 0 29.8
Simplified29.8
rmApplied div-inv29.9
Applied *-un-lft-identity29.9
Applied times-frac14.5
Simplified14.4
if 3.8569470324880954e-10 < i Initial program 32.0
Taylor expanded around 0 30.0
Final simplification18.8
herbie shell --seed 2019121
(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))))