100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -0.8489635077384908301567634225648362189531:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 0.5476118163719528864064045592385809868574:\\
\;\;\;\;\frac{100}{i} \cdot \left(\left(\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)\right) \cdot n\right)\\
\mathbf{else}:\\
\;\;\;\;\left(100 \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1} \cdot \sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1}}{i}\right) \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1}}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r110804 = 100.0;
double r110805 = 1.0;
double r110806 = i;
double r110807 = n;
double r110808 = r110806 / r110807;
double r110809 = r110805 + r110808;
double r110810 = pow(r110809, r110807);
double r110811 = r110810 - r110805;
double r110812 = r110811 / r110808;
double r110813 = r110804 * r110812;
return r110813;
}
double f(double i, double n) {
double r110814 = i;
double r110815 = -0.8489635077384908;
bool r110816 = r110814 <= r110815;
double r110817 = 100.0;
double r110818 = n;
double r110819 = r110814 / r110818;
double r110820 = pow(r110819, r110818);
double r110821 = 1.0;
double r110822 = r110820 - r110821;
double r110823 = r110822 / r110819;
double r110824 = r110817 * r110823;
double r110825 = 0.5476118163719529;
bool r110826 = r110814 <= r110825;
double r110827 = r110817 / r110814;
double r110828 = r110821 * r110814;
double r110829 = 0.5;
double r110830 = 2.0;
double r110831 = pow(r110814, r110830);
double r110832 = r110829 * r110831;
double r110833 = log(r110821);
double r110834 = r110833 * r110818;
double r110835 = r110832 + r110834;
double r110836 = r110828 + r110835;
double r110837 = r110831 * r110833;
double r110838 = r110829 * r110837;
double r110839 = r110836 - r110838;
double r110840 = r110839 * r110818;
double r110841 = r110827 * r110840;
double r110842 = r110821 + r110819;
double r110843 = pow(r110842, r110818);
double r110844 = r110843 - r110821;
double r110845 = cbrt(r110844);
double r110846 = r110845 * r110845;
double r110847 = r110846 / r110814;
double r110848 = r110817 * r110847;
double r110849 = 1.0;
double r110850 = r110849 / r110818;
double r110851 = r110845 / r110850;
double r110852 = r110848 * r110851;
double r110853 = r110826 ? r110841 : r110852;
double r110854 = r110816 ? r110824 : r110853;
return r110854;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.0 |
|---|---|
| Target | 43.5 |
| Herbie | 18.8 |
if i < -0.8489635077384908Initial program 27.4
Taylor expanded around inf 64.0
Simplified18.2
if -0.8489635077384908 < i < 0.5476118163719529Initial program 50.8
Taylor expanded around 0 34.2
rmApplied div-inv34.3
Applied *-un-lft-identity34.3
Applied times-frac15.8
Simplified15.8
rmApplied associate-*r*16.2
Simplified16.1
if 0.5476118163719529 < i Initial program 32.4
rmApplied div-inv32.4
Applied add-cube-cbrt32.4
Applied times-frac32.4
Applied associate-*r*32.4
Final simplification18.8
herbie shell --seed 2019323
(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))))