100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -0.6272769565773454:\\
\;\;\;\;100 \cdot \left(\left(n + i \cdot \left(\frac{1}{2} \cdot n\right)\right) + \left(\left(i \cdot i\right) \cdot \frac{1}{6}\right) \cdot n\right)\\
\mathbf{elif}\;n \le 1.4389956636303172 \cdot 10^{-137}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \left(\left(n + i \cdot \left(\frac{1}{2} \cdot n\right)\right) + \left(\left(i \cdot i\right) \cdot \frac{1}{6}\right) \cdot n\right)\\
\end{array}double f(double i, double n) {
double r6273603 = 100.0;
double r6273604 = 1.0;
double r6273605 = i;
double r6273606 = n;
double r6273607 = r6273605 / r6273606;
double r6273608 = r6273604 + r6273607;
double r6273609 = pow(r6273608, r6273606);
double r6273610 = r6273609 - r6273604;
double r6273611 = r6273610 / r6273607;
double r6273612 = r6273603 * r6273611;
return r6273612;
}
double f(double i, double n) {
double r6273613 = n;
double r6273614 = -0.6272769565773454;
bool r6273615 = r6273613 <= r6273614;
double r6273616 = 100.0;
double r6273617 = i;
double r6273618 = 0.5;
double r6273619 = r6273618 * r6273613;
double r6273620 = r6273617 * r6273619;
double r6273621 = r6273613 + r6273620;
double r6273622 = r6273617 * r6273617;
double r6273623 = 0.16666666666666666;
double r6273624 = r6273622 * r6273623;
double r6273625 = r6273624 * r6273613;
double r6273626 = r6273621 + r6273625;
double r6273627 = r6273616 * r6273626;
double r6273628 = 1.4389956636303172e-137;
bool r6273629 = r6273613 <= r6273628;
double r6273630 = 0.0;
double r6273631 = r6273629 ? r6273630 : r6273627;
double r6273632 = r6273615 ? r6273627 : r6273631;
return r6273632;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.5 |
|---|---|
| Target | 42.6 |
| Herbie | 20.3 |
if n < -0.6272769565773454 or 1.4389956636303172e-137 < n Initial program 52.0
Taylor expanded around 0 37.6
Simplified37.6
Taylor expanded around 0 21.6
Simplified21.5
if -0.6272769565773454 < n < 1.4389956636303172e-137Initial program 24.6
Taylor expanded around 0 18.0
Final simplification20.3
herbie shell --seed 2019168
(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))))