100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -0.1198183818045873705315784718550276011229:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 5.738844998942817632325841259444132447243:\\
\;\;\;\;\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}\;i \le 3.877114676469803572790117232248422698017 \cdot 10^{110}:\\
\;\;\;\;100 \cdot \frac{n \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{i}\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right) - 1}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r100817 = 100.0;
double r100818 = 1.0;
double r100819 = i;
double r100820 = n;
double r100821 = r100819 / r100820;
double r100822 = r100818 + r100821;
double r100823 = pow(r100822, r100820);
double r100824 = r100823 - r100818;
double r100825 = r100824 / r100821;
double r100826 = r100817 * r100825;
return r100826;
}
double f(double i, double n) {
double r100827 = i;
double r100828 = -0.11981838180458737;
bool r100829 = r100827 <= r100828;
double r100830 = 100.0;
double r100831 = n;
double r100832 = r100827 / r100831;
double r100833 = pow(r100832, r100831);
double r100834 = 1.0;
double r100835 = r100833 - r100834;
double r100836 = r100835 / r100832;
double r100837 = r100830 * r100836;
double r100838 = 5.738844998942818;
bool r100839 = r100827 <= r100838;
double r100840 = r100834 * r100827;
double r100841 = 0.5;
double r100842 = 2.0;
double r100843 = pow(r100827, r100842);
double r100844 = r100841 * r100843;
double r100845 = log(r100834);
double r100846 = r100845 * r100831;
double r100847 = r100844 + r100846;
double r100848 = r100840 + r100847;
double r100849 = r100843 * r100845;
double r100850 = r100841 * r100849;
double r100851 = r100848 - r100850;
double r100852 = r100851 / r100827;
double r100853 = r100830 * r100852;
double r100854 = r100853 * r100831;
double r100855 = 3.8771146764698036e+110;
bool r100856 = r100827 <= r100855;
double r100857 = r100831 * r100835;
double r100858 = r100857 / r100827;
double r100859 = r100830 * r100858;
double r100860 = 1.0;
double r100861 = r100846 + r100860;
double r100862 = r100840 + r100861;
double r100863 = r100862 - r100834;
double r100864 = r100863 / r100832;
double r100865 = r100830 * r100864;
double r100866 = r100856 ? r100859 : r100865;
double r100867 = r100839 ? r100854 : r100866;
double r100868 = r100829 ? r100837 : r100867;
return r100868;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.2 |
|---|---|
| Target | 42.7 |
| Herbie | 19.3 |
if i < -0.11981838180458737Initial program 27.8
Taylor expanded around inf 64.0
Simplified18.2
if -0.11981838180458737 < i < 5.738844998942818Initial program 50.9
Taylor expanded around 0 34.6
rmApplied associate-/r/16.6
Applied associate-*r*16.6
if 5.738844998942818 < i < 3.8771146764698036e+110Initial program 33.3
Taylor expanded around inf 32.0
Simplified33.3
if 3.8771146764698036e+110 < i Initial program 34.7
Taylor expanded around 0 34.3
Final simplification19.3
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))))