100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -1.6350012191006144 \cdot 10^{-11}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}{i}}{\frac{1}{n}}\\
\mathbf{elif}\;i \le 5.39212722965903 \cdot 10^{-258}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 9.24682495818279 \cdot 10^{-232}:\\
\;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 0.22389212326838298:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r4112367 = 100.0;
double r4112368 = 1.0;
double r4112369 = i;
double r4112370 = n;
double r4112371 = r4112369 / r4112370;
double r4112372 = r4112368 + r4112371;
double r4112373 = pow(r4112372, r4112370);
double r4112374 = r4112373 - r4112368;
double r4112375 = r4112374 / r4112371;
double r4112376 = r4112367 * r4112375;
return r4112376;
}
double f(double i, double n) {
double r4112377 = i;
double r4112378 = -1.6350012191006144e-11;
bool r4112379 = r4112377 <= r4112378;
double r4112380 = 100.0;
double r4112381 = n;
double r4112382 = r4112377 / r4112381;
double r4112383 = log1p(r4112382);
double r4112384 = r4112383 * r4112381;
double r4112385 = exp(r4112384);
double r4112386 = -100.0;
double r4112387 = fma(r4112380, r4112385, r4112386);
double r4112388 = r4112387 / r4112377;
double r4112389 = 1.0;
double r4112390 = r4112389 / r4112381;
double r4112391 = r4112388 / r4112390;
double r4112392 = 5.39212722965903e-258;
bool r4112393 = r4112377 <= r4112392;
double r4112394 = r4112377 * r4112377;
double r4112395 = 50.0;
double r4112396 = 16.666666666666668;
double r4112397 = r4112394 * r4112396;
double r4112398 = r4112397 + r4112380;
double r4112399 = r4112398 * r4112377;
double r4112400 = fma(r4112394, r4112395, r4112399);
double r4112401 = r4112400 / r4112382;
double r4112402 = 9.24682495818279e-232;
bool r4112403 = r4112377 <= r4112402;
double r4112404 = r4112382 + r4112389;
double r4112405 = pow(r4112404, r4112381);
double r4112406 = fma(r4112380, r4112405, r4112386);
double r4112407 = exp(r4112406);
double r4112408 = log(r4112407);
double r4112409 = r4112408 / r4112382;
double r4112410 = 0.22389212326838298;
bool r4112411 = r4112377 <= r4112410;
double r4112412 = r4112411 ? r4112401 : r4112409;
double r4112413 = r4112403 ? r4112409 : r4112412;
double r4112414 = r4112393 ? r4112401 : r4112413;
double r4112415 = r4112379 ? r4112391 : r4112414;
return r4112415;
}




Bits error versus i




Bits error versus n
| Original | 42.5 |
|---|---|
| Target | 41.8 |
| Herbie | 26.7 |
if i < -1.6350012191006144e-11Initial program 29.1
Simplified29.0
rmApplied add-exp-log29.1
Applied pow-exp29.1
Simplified5.9
rmApplied div-inv6.0
Applied associate-/r*6.5
if -1.6350012191006144e-11 < i < 5.39212722965903e-258 or 9.24682495818279e-232 < i < 0.22389212326838298Initial program 50.3
Simplified50.3
Taylor expanded around 0 32.8
Simplified32.8
if 5.39212722965903e-258 < i < 9.24682495818279e-232 or 0.22389212326838298 < i Initial program 34.1
Simplified34.0
rmApplied add-log-exp34.2
Final simplification26.7
herbie shell --seed 2019129 +o rules:numerics
(FPCore (i n)
:name "Compound Interest"
: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))))