100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -2.346652527723265269088415152509696781635:\\
\;\;\;\;\left(100 \cdot \frac{\mathsf{fma}\left(1, i, \mathsf{fma}\left(0.5, {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 5.321174585513155719949917669658167093164 \cdot 10^{-285}:\\
\;\;\;\;100 \cdot \frac{{\left({\left(1 + \frac{i}{n}\right)}^{\left(\sqrt[3]{n} \cdot \sqrt[3]{n}\right)}\right)}^{\left(\sqrt[3]{n}\right)} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;n \le 3.089742171439268069923790151154466595501 \cdot 10^{-181}:\\
\;\;\;\;100 \cdot \frac{\mathsf{fma}\left(1, i, \mathsf{fma}\left(\log 1, n, 1\right)\right) - 1}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\left(100 \cdot \frac{\mathsf{fma}\left(1, i, \mathsf{fma}\left(0.5, {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 r140502 = 100.0;
double r140503 = 1.0;
double r140504 = i;
double r140505 = n;
double r140506 = r140504 / r140505;
double r140507 = r140503 + r140506;
double r140508 = pow(r140507, r140505);
double r140509 = r140508 - r140503;
double r140510 = r140509 / r140506;
double r140511 = r140502 * r140510;
return r140511;
}
double f(double i, double n) {
double r140512 = n;
double r140513 = -2.3466525277232653;
bool r140514 = r140512 <= r140513;
double r140515 = 100.0;
double r140516 = 1.0;
double r140517 = i;
double r140518 = 0.5;
double r140519 = 2.0;
double r140520 = pow(r140517, r140519);
double r140521 = log(r140516);
double r140522 = r140521 * r140512;
double r140523 = fma(r140518, r140520, r140522);
double r140524 = fma(r140516, r140517, r140523);
double r140525 = r140520 * r140521;
double r140526 = r140518 * r140525;
double r140527 = r140524 - r140526;
double r140528 = r140527 / r140517;
double r140529 = r140515 * r140528;
double r140530 = r140529 * r140512;
double r140531 = 5.321174585513156e-285;
bool r140532 = r140512 <= r140531;
double r140533 = r140517 / r140512;
double r140534 = r140516 + r140533;
double r140535 = cbrt(r140512);
double r140536 = r140535 * r140535;
double r140537 = pow(r140534, r140536);
double r140538 = pow(r140537, r140535);
double r140539 = r140538 - r140516;
double r140540 = r140539 / r140533;
double r140541 = r140515 * r140540;
double r140542 = 3.089742171439268e-181;
bool r140543 = r140512 <= r140542;
double r140544 = 1.0;
double r140545 = fma(r140521, r140512, r140544);
double r140546 = fma(r140516, r140517, r140545);
double r140547 = r140546 - r140516;
double r140548 = r140547 / r140533;
double r140549 = r140515 * r140548;
double r140550 = r140543 ? r140549 : r140530;
double r140551 = r140532 ? r140541 : r140550;
double r140552 = r140514 ? r140530 : r140551;
return r140552;
}




Bits error versus i




Bits error versus n
| Original | 43.1 |
|---|---|
| Target | 43.3 |
| Herbie | 21.0 |
if n < -2.3466525277232653 or 3.089742171439268e-181 < n Initial program 52.9
Taylor expanded around 0 39.0
Simplified39.0
rmApplied associate-/r/22.3
Applied associate-*r*22.3
if -2.3466525277232653 < n < 5.321174585513156e-285Initial program 15.2
rmApplied add-cube-cbrt15.2
Applied pow-unpow15.2
if 5.321174585513156e-285 < n < 3.089742171439268e-181Initial program 41.9
Taylor expanded around 0 27.6
Simplified27.6
Final simplification21.0
herbie shell --seed 2019351 +o rules:numerics
(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))))