100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -1.17879906071750874 \cdot 10^{-7}:\\
\;\;\;\;100 \cdot \frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 8.74609462986419547 \cdot 10^{-16}:\\
\;\;\;\;100 \cdot \left(\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} \cdot n\right)\\
\mathbf{else}:\\
\;\;\;\;\left(100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{i}\right) \cdot n\\
\end{array}double f(double i, double n) {
double r116963 = 100.0;
double r116964 = 1.0;
double r116965 = i;
double r116966 = n;
double r116967 = r116965 / r116966;
double r116968 = r116964 + r116967;
double r116969 = pow(r116968, r116966);
double r116970 = r116969 - r116964;
double r116971 = r116970 / r116967;
double r116972 = r116963 * r116971;
return r116972;
}
double f(double i, double n) {
double r116973 = i;
double r116974 = -1.1787990607175087e-07;
bool r116975 = r116973 <= r116974;
double r116976 = 100.0;
double r116977 = 1.0;
double r116978 = n;
double r116979 = r116973 / r116978;
double r116980 = r116977 + r116979;
double r116981 = pow(r116980, r116978);
double r116982 = r116981 - r116977;
double r116983 = exp(r116982);
double r116984 = log(r116983);
double r116985 = r116984 / r116979;
double r116986 = r116976 * r116985;
double r116987 = 8.746094629864195e-16;
bool r116988 = r116973 <= r116987;
double r116989 = r116977 * r116973;
double r116990 = 0.5;
double r116991 = 2.0;
double r116992 = pow(r116973, r116991);
double r116993 = r116990 * r116992;
double r116994 = log(r116977);
double r116995 = r116994 * r116978;
double r116996 = r116993 + r116995;
double r116997 = r116989 + r116996;
double r116998 = r116992 * r116994;
double r116999 = r116990 * r116998;
double r117000 = r116997 - r116999;
double r117001 = r117000 / r116973;
double r117002 = r117001 * r116978;
double r117003 = r116976 * r117002;
double r117004 = r116982 / r116973;
double r117005 = r116976 * r117004;
double r117006 = r117005 * r116978;
double r117007 = r116988 ? r117003 : r117006;
double r117008 = r116975 ? r116986 : r117007;
return r117008;
}




Bits error versus i




Bits error versus n
Results
| Original | 47.3 |
|---|---|
| Target | 47.0 |
| Herbie | 17.3 |
if i < -1.1787990607175087e-07Initial program 29.1
rmApplied add-log-exp29.1
Applied add-log-exp29.1
Applied diff-log29.1
Simplified29.1
if -1.1787990607175087e-07 < i < 8.746094629864195e-16Initial program 57.8
Taylor expanded around 0 27.1
rmApplied associate-/r/9.2
if 8.746094629864195e-16 < i Initial program 32.5
rmApplied associate-/r/32.5
Applied associate-*r*32.5
Final simplification17.3
herbie shell --seed 2020100
(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))))