100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -3.076493361831821548083157134309908748576 \cdot 10^{-11}:\\
\;\;\;\;100 \cdot \frac{{\left({\left(\frac{i}{n} + 1\right)}^{n}\right)}^{3} - {1}^{3}}{\frac{i}{n} \cdot \left({\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n} + \left(1 \cdot 1 + 1 \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right)\right)}\\
\mathbf{elif}\;i \le 7.743283777926976085836940910667181015015:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{\left(\left(n - i \cdot \left(i \cdot 0.5\right)\right) \cdot \log 1 + i \cdot \left(i \cdot 0.5\right)\right) + 1 \cdot i}{i}\right)\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\frac{{\left(\frac{i}{n} + 1\right)}^{n} - 1}{i}}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r7237590 = 100.0;
double r7237591 = 1.0;
double r7237592 = i;
double r7237593 = n;
double r7237594 = r7237592 / r7237593;
double r7237595 = r7237591 + r7237594;
double r7237596 = pow(r7237595, r7237593);
double r7237597 = r7237596 - r7237591;
double r7237598 = r7237597 / r7237594;
double r7237599 = r7237590 * r7237598;
return r7237599;
}
double f(double i, double n) {
double r7237600 = i;
double r7237601 = -3.0764933618318215e-11;
bool r7237602 = r7237600 <= r7237601;
double r7237603 = 100.0;
double r7237604 = n;
double r7237605 = r7237600 / r7237604;
double r7237606 = 1.0;
double r7237607 = r7237605 + r7237606;
double r7237608 = pow(r7237607, r7237604);
double r7237609 = 3.0;
double r7237610 = pow(r7237608, r7237609);
double r7237611 = pow(r7237606, r7237609);
double r7237612 = r7237610 - r7237611;
double r7237613 = r7237608 * r7237608;
double r7237614 = r7237606 * r7237606;
double r7237615 = r7237606 * r7237608;
double r7237616 = r7237614 + r7237615;
double r7237617 = r7237613 + r7237616;
double r7237618 = r7237605 * r7237617;
double r7237619 = r7237612 / r7237618;
double r7237620 = r7237603 * r7237619;
double r7237621 = 7.743283777926976;
bool r7237622 = r7237600 <= r7237621;
double r7237623 = 0.5;
double r7237624 = r7237600 * r7237623;
double r7237625 = r7237600 * r7237624;
double r7237626 = r7237604 - r7237625;
double r7237627 = log(r7237606);
double r7237628 = r7237626 * r7237627;
double r7237629 = r7237628 + r7237625;
double r7237630 = r7237606 * r7237600;
double r7237631 = r7237629 + r7237630;
double r7237632 = r7237631 / r7237600;
double r7237633 = r7237604 * r7237632;
double r7237634 = r7237603 * r7237633;
double r7237635 = r7237608 - r7237606;
double r7237636 = r7237635 / r7237600;
double r7237637 = 1.0;
double r7237638 = r7237637 / r7237604;
double r7237639 = r7237636 / r7237638;
double r7237640 = r7237603 * r7237639;
double r7237641 = r7237622 ? r7237634 : r7237640;
double r7237642 = r7237602 ? r7237620 : r7237641;
return r7237642;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.8 |
|---|---|
| Target | 42.7 |
| Herbie | 21.7 |
if i < -3.0764933618318215e-11Initial program 28.6
rmApplied flip3--28.6
Applied associate-/l/28.6
if -3.0764933618318215e-11 < i < 7.743283777926976Initial program 50.7
Taylor expanded around 0 34.0
Simplified34.0
rmApplied associate-/r/17.0
Simplified17.0
if 7.743283777926976 < i Initial program 31.3
rmApplied div-inv31.4
Applied associate-/r*31.4
Final simplification21.7
herbie shell --seed 2019179
(FPCore (i n)
:name "Compound Interest"
:herbie-target
(* 100.0 (/ (- (exp (* n (if (== (+ 1.0 (/ i n)) 1.0) (/ i n) (/ (* (/ i n) (log (+ 1.0 (/ i n)))) (- (+ (/ i n) 1.0) 1.0))))) 1.0) (/ i n)))
(* 100.0 (/ (- (pow (+ 1.0 (/ i n)) n) 1.0) (/ i n))))