100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -1.242571603158447402612826938411730448414 \cdot 10^{142}:\\
\;\;\;\;100 \cdot \left(\frac{{\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}}{\frac{i}{n} \cdot \left(\mathsf{fma}\left(1, i, \mathsf{fma}\left(\log 1, n, 1\right)\right) + 1\right)} - \frac{\frac{1 \cdot 1}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\right)\\
\mathbf{elif}\;n \le -1.444040608233363442991503688972443342209:\\
\;\;\;\;100 \cdot \left(\left(0.5 \cdot \left(i \cdot n\right) + \left(1 \cdot n + 1 \cdot \frac{\log 1 \cdot {n}^{2}}{i}\right)\right) - 0.5 \cdot \left(i \cdot \left(\log 1 \cdot n\right)\right)\right)\\
\mathbf{elif}\;n \le 4.687031455960939276601935165861541225984 \cdot 10^{-109}:\\
\;\;\;\;\sqrt{100} \cdot \mathsf{fma}\left(1, \sqrt{100} \cdot \left({n}^{2} \cdot \log 1\right), \mathsf{fma}\left(\frac{1}{2}, \frac{{\left(\log 1\right)}^{2} \cdot \left({n}^{3} \cdot \sqrt{100}\right)}{i}, \frac{\log 1 \cdot \left({n}^{2} \cdot \sqrt{100}\right)}{i}\right)\right)\\
\mathbf{elif}\;n \le 1.3538891898856935363908521183491446525 \cdot 10^{154}:\\
\;\;\;\;100 \cdot \left(\left(0.5 \cdot \left(i \cdot n\right) + \left(1 \cdot n + 1 \cdot \frac{\log 1 \cdot {n}^{2}}{i}\right)\right) - 0.5 \cdot \left(i \cdot \left(\log 1 \cdot n\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\frac{\mathsf{fma}\left(i, 2, \mathsf{fma}\left(2, {i}^{2}, 2 \cdot \left(\log 1 \cdot n\right)\right) - 2 \cdot \left({i}^{2} \cdot \log 1\right)\right)}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r236720 = 100.0;
double r236721 = 1.0;
double r236722 = i;
double r236723 = n;
double r236724 = r236722 / r236723;
double r236725 = r236721 + r236724;
double r236726 = pow(r236725, r236723);
double r236727 = r236726 - r236721;
double r236728 = r236727 / r236724;
double r236729 = r236720 * r236728;
return r236729;
}
double f(double i, double n) {
double r236730 = n;
double r236731 = -1.2425716031584474e+142;
bool r236732 = r236730 <= r236731;
double r236733 = 100.0;
double r236734 = 1.0;
double r236735 = i;
double r236736 = r236735 / r236730;
double r236737 = r236734 + r236736;
double r236738 = 2.0;
double r236739 = r236738 * r236730;
double r236740 = pow(r236737, r236739);
double r236741 = log(r236734);
double r236742 = 1.0;
double r236743 = fma(r236741, r236730, r236742);
double r236744 = fma(r236734, r236735, r236743);
double r236745 = r236744 + r236734;
double r236746 = r236736 * r236745;
double r236747 = r236740 / r236746;
double r236748 = r236734 * r236734;
double r236749 = pow(r236737, r236730);
double r236750 = r236749 + r236734;
double r236751 = r236748 / r236750;
double r236752 = r236751 / r236736;
double r236753 = r236747 - r236752;
double r236754 = r236733 * r236753;
double r236755 = -1.4440406082333634;
bool r236756 = r236730 <= r236755;
double r236757 = 0.5;
double r236758 = r236735 * r236730;
double r236759 = r236757 * r236758;
double r236760 = r236734 * r236730;
double r236761 = pow(r236730, r236738);
double r236762 = r236741 * r236761;
double r236763 = r236762 / r236735;
double r236764 = r236734 * r236763;
double r236765 = r236760 + r236764;
double r236766 = r236759 + r236765;
double r236767 = r236741 * r236730;
double r236768 = r236735 * r236767;
double r236769 = r236757 * r236768;
double r236770 = r236766 - r236769;
double r236771 = r236733 * r236770;
double r236772 = 4.687031455960939e-109;
bool r236773 = r236730 <= r236772;
double r236774 = sqrt(r236733);
double r236775 = r236761 * r236741;
double r236776 = r236774 * r236775;
double r236777 = 0.5;
double r236778 = pow(r236741, r236738);
double r236779 = 3.0;
double r236780 = pow(r236730, r236779);
double r236781 = r236780 * r236774;
double r236782 = r236778 * r236781;
double r236783 = r236782 / r236735;
double r236784 = r236761 * r236774;
double r236785 = r236741 * r236784;
double r236786 = r236785 / r236735;
double r236787 = fma(r236777, r236783, r236786);
double r236788 = fma(r236734, r236776, r236787);
double r236789 = r236774 * r236788;
double r236790 = 1.3538891898856935e+154;
bool r236791 = r236730 <= r236790;
double r236792 = 2.0;
double r236793 = pow(r236735, r236738);
double r236794 = r236738 * r236767;
double r236795 = fma(r236792, r236793, r236794);
double r236796 = r236793 * r236741;
double r236797 = r236792 * r236796;
double r236798 = r236795 - r236797;
double r236799 = fma(r236735, r236792, r236798);
double r236800 = r236799 / r236750;
double r236801 = r236800 / r236736;
double r236802 = r236733 * r236801;
double r236803 = r236791 ? r236771 : r236802;
double r236804 = r236773 ? r236789 : r236803;
double r236805 = r236756 ? r236771 : r236804;
double r236806 = r236732 ? r236754 : r236805;
return r236806;
}




Bits error versus i




Bits error versus n
| Original | 42.9 |
|---|---|
| Target | 42.7 |
| Herbie | 29.3 |
if n < -1.2425716031584474e+142Initial program 52.6
rmApplied flip--52.6
Simplified52.6
rmApplied unsub-neg52.6
Applied div-sub52.6
Applied div-sub52.7
Simplified52.7
Taylor expanded around 0 50.6
Simplified50.6
if -1.2425716031584474e+142 < n < -1.4440406082333634 or 4.687031455960939e-109 < n < 1.3538891898856935e+154Initial program 49.6
rmApplied flip--49.6
Simplified49.6
rmApplied unsub-neg49.6
Applied div-sub49.6
Applied div-sub49.7
Simplified49.6
Taylor expanded around 0 21.4
if -1.4440406082333634 < n < 4.687031455960939e-109Initial program 25.9
rmApplied add-sqr-sqrt25.9
Applied associate-*l*25.9
Taylor expanded around 0 20.1
Simplified20.1
if 1.3538891898856935e+154 < n Initial program 61.6
rmApplied flip--61.6
Simplified61.6
Taylor expanded around 0 51.7
Simplified51.7
Final simplification29.3
herbie shell --seed 2019356 +o rules:numerics
(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))))