100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -0.7181130799545676:\\
\;\;\;\;100 \cdot n + \left(\left(\frac{1}{2} \cdot i + \frac{1}{6} \cdot \left(i \cdot i\right)\right) \cdot n\right) \cdot 100\\
\mathbf{elif}\;n \le 3.201668089989767 \cdot 10^{-118}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;100 \cdot n + \left(\left(\frac{1}{2} \cdot i + \frac{1}{6} \cdot \left(i \cdot i\right)\right) \cdot n\right) \cdot 100\\
\end{array}double f(double i, double n) {
double r5245696 = 100.0;
double r5245697 = 1.0;
double r5245698 = i;
double r5245699 = n;
double r5245700 = r5245698 / r5245699;
double r5245701 = r5245697 + r5245700;
double r5245702 = pow(r5245701, r5245699);
double r5245703 = r5245702 - r5245697;
double r5245704 = r5245703 / r5245700;
double r5245705 = r5245696 * r5245704;
return r5245705;
}
double f(double i, double n) {
double r5245706 = n;
double r5245707 = -0.7181130799545676;
bool r5245708 = r5245706 <= r5245707;
double r5245709 = 100.0;
double r5245710 = r5245709 * r5245706;
double r5245711 = 0.5;
double r5245712 = i;
double r5245713 = r5245711 * r5245712;
double r5245714 = 0.16666666666666666;
double r5245715 = r5245712 * r5245712;
double r5245716 = r5245714 * r5245715;
double r5245717 = r5245713 + r5245716;
double r5245718 = r5245717 * r5245706;
double r5245719 = r5245718 * r5245709;
double r5245720 = r5245710 + r5245719;
double r5245721 = 3.201668089989767e-118;
bool r5245722 = r5245706 <= r5245721;
double r5245723 = 0.0;
double r5245724 = r5245722 ? r5245723 : r5245720;
double r5245725 = r5245708 ? r5245720 : r5245724;
return r5245725;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.6 |
|---|---|
| Target | 42.2 |
| Herbie | 20.6 |
if n < -0.7181130799545676 or 3.201668089989767e-118 < n Initial program 51.9
Taylor expanded around 0 37.1
Simplified37.1
Taylor expanded around inf 21.3
Simplified21.3
rmApplied distribute-rgt-in21.3
Simplified21.1
if -0.7181130799545676 < n < 3.201668089989767e-118Initial program 25.9
Taylor expanded around 0 19.5
Final simplification20.6
herbie shell --seed 2019134
(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))))