100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le \frac{-4112455867215833}{4503599627370496}:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \le \frac{3742457391875645}{36028797018963968}:\\
\;\;\;\;100 \cdot \left(\frac{\left(1 \cdot i + \left(\frac{1}{2} \cdot {i}^{2} + \log 1 \cdot n\right)\right) - \frac{1}{2} \cdot \left({i}^{2} \cdot \log 1\right)}{i} \cdot n\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{100}{i} \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r124639 = 100.0;
double r124640 = 1.0;
double r124641 = i;
double r124642 = n;
double r124643 = r124641 / r124642;
double r124644 = r124640 + r124643;
double r124645 = pow(r124644, r124642);
double r124646 = r124645 - r124640;
double r124647 = r124646 / r124643;
double r124648 = r124639 * r124647;
return r124648;
}
double f(double i, double n) {
double r124649 = i;
double r124650 = -4112455867215833.0;
double r124651 = 4503599627370496.0;
double r124652 = r124650 / r124651;
bool r124653 = r124649 <= r124652;
double r124654 = 100.0;
double r124655 = n;
double r124656 = r124649 / r124655;
double r124657 = pow(r124656, r124655);
double r124658 = 1.0;
double r124659 = r124657 - r124658;
double r124660 = r124659 / r124656;
double r124661 = r124654 * r124660;
double r124662 = 3742457391875645.0;
double r124663 = 3.602879701896397e+16;
double r124664 = r124662 / r124663;
bool r124665 = r124649 <= r124664;
double r124666 = r124658 * r124649;
double r124667 = 2.0;
double r124668 = r124658 / r124667;
double r124669 = 2.0;
double r124670 = pow(r124649, r124669);
double r124671 = r124668 * r124670;
double r124672 = log(r124658);
double r124673 = r124672 * r124655;
double r124674 = r124671 + r124673;
double r124675 = r124666 + r124674;
double r124676 = r124670 * r124672;
double r124677 = r124668 * r124676;
double r124678 = r124675 - r124677;
double r124679 = r124678 / r124649;
double r124680 = r124679 * r124655;
double r124681 = r124654 * r124680;
double r124682 = r124654 / r124649;
double r124683 = r124658 + r124656;
double r124684 = pow(r124683, r124655);
double r124685 = r124684 - r124658;
double r124686 = 1.0;
double r124687 = r124686 / r124655;
double r124688 = r124685 / r124687;
double r124689 = r124682 * r124688;
double r124690 = r124665 ? r124681 : r124689;
double r124691 = r124653 ? r124661 : r124690;
return r124691;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.1 |
|---|---|
| Target | 43.0 |
| Herbie | 19.2 |
if i < -0.9131486383075667Initial program 28.1
Taylor expanded around inf 64.0
Simplified18.7
if -0.9131486383075667 < i < 0.10387405912847383Initial program 50.8
Taylor expanded around 0 33.3
Simplified33.3
rmApplied associate-/r/16.4
if 0.10387405912847383 < i Initial program 32.5
rmApplied div-inv32.5
Applied *-un-lft-identity32.5
Applied times-frac32.6
Applied associate-*r*32.6
Simplified32.5
Final simplification19.2
herbie shell --seed 2019304
(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))))