100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -4.149010238435241158672102707990865653784 \cdot 10^{81}:\\
\;\;\;\;\left(100 \cdot \frac{\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{i}\right) \cdot n\\
\mathbf{elif}\;n \le -542476406070019424583054687209865554690000:\\
\;\;\;\;\left(100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{i}\right) \cdot n\\
\mathbf{elif}\;n \le -4.613441314353611488741080393083393573761:\\
\;\;\;\;\left(100 \cdot \frac{\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{i}\right) \cdot n\\
\mathbf{elif}\;n \le -1.4890995792184122714112127553574285671 \cdot 10^{-273}:\\
\;\;\;\;100 \cdot \frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}}\\
\mathbf{elif}\;n \le 1.010512134864181889603036020016059338592 \cdot 10^{-197}:\\
\;\;\;\;100 \cdot \frac{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right) - 1}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\left(100 \cdot \frac{\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{i}\right) \cdot n\\
\end{array}double f(double i, double n) {
double r149760 = 100.0;
double r149761 = 1.0;
double r149762 = i;
double r149763 = n;
double r149764 = r149762 / r149763;
double r149765 = r149761 + r149764;
double r149766 = pow(r149765, r149763);
double r149767 = r149766 - r149761;
double r149768 = r149767 / r149764;
double r149769 = r149760 * r149768;
return r149769;
}
double f(double i, double n) {
double r149770 = n;
double r149771 = -4.149010238435241e+81;
bool r149772 = r149770 <= r149771;
double r149773 = 100.0;
double r149774 = 1.0;
double r149775 = i;
double r149776 = r149774 * r149775;
double r149777 = 0.5;
double r149778 = 2.0;
double r149779 = pow(r149775, r149778);
double r149780 = r149777 * r149779;
double r149781 = log(r149774);
double r149782 = r149781 * r149770;
double r149783 = r149780 + r149782;
double r149784 = r149776 + r149783;
double r149785 = r149779 * r149781;
double r149786 = r149777 * r149785;
double r149787 = r149784 - r149786;
double r149788 = r149787 / r149775;
double r149789 = r149773 * r149788;
double r149790 = r149789 * r149770;
double r149791 = -5.424764060700194e+41;
bool r149792 = r149770 <= r149791;
double r149793 = r149775 / r149770;
double r149794 = r149774 + r149793;
double r149795 = pow(r149794, r149770);
double r149796 = r149795 - r149774;
double r149797 = r149796 / r149775;
double r149798 = r149773 * r149797;
double r149799 = r149798 * r149770;
double r149800 = -4.6134413143536115;
bool r149801 = r149770 <= r149800;
double r149802 = -1.4890995792184123e-273;
bool r149803 = r149770 <= r149802;
double r149804 = exp(r149796);
double r149805 = log(r149804);
double r149806 = r149805 / r149793;
double r149807 = r149773 * r149806;
double r149808 = 1.0105121348641819e-197;
bool r149809 = r149770 <= r149808;
double r149810 = 1.0;
double r149811 = r149782 + r149810;
double r149812 = r149776 + r149811;
double r149813 = r149812 - r149774;
double r149814 = r149813 / r149793;
double r149815 = r149773 * r149814;
double r149816 = r149809 ? r149815 : r149790;
double r149817 = r149803 ? r149807 : r149816;
double r149818 = r149801 ? r149790 : r149817;
double r149819 = r149792 ? r149799 : r149818;
double r149820 = r149772 ? r149790 : r149819;
return r149820;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.2 |
|---|---|
| Target | 42.7 |
| Herbie | 21.8 |
if n < -4.149010238435241e+81 or -5.424764060700194e+41 < n < -4.6134413143536115 or 1.0105121348641819e-197 < n Initial program 54.1
Taylor expanded around 0 40.1
rmApplied associate-/r/23.2
Applied associate-*r*23.2
if -4.149010238435241e+81 < n < -5.424764060700194e+41Initial program 35.3
rmApplied associate-/r/35.2
Applied associate-*r*35.2
if -4.6134413143536115 < n < -1.4890995792184123e-273Initial program 16.1
rmApplied add-log-exp16.1
Applied add-log-exp16.2
Applied diff-log16.2
Simplified16.1
if -1.4890995792184123e-273 < n < 1.0105121348641819e-197Initial program 30.6
Taylor expanded around 0 18.6
Final simplification21.8
herbie shell --seed 2019322
(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))))