100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -1.967890440787981 \cdot 10^{-12}:\\
\;\;\;\;\frac{1}{\frac{i}{n}} \cdot \mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)\\
\mathbf{elif}\;i \le 0.23936266726166916:\\
\;\;\;\;\frac{\frac{i \cdot \mathsf{fma}\left(i, \left(\mathsf{fma}\left(i, \frac{50}{3}, 50\right)\right), 100\right)}{i}}{\frac{1}{n}}\\
\mathbf{elif}\;i \le 4.0545436608851676 \cdot 10^{+138}:\\
\;\;\;\;\frac{\mathsf{fma}\left(50, \left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right), \left(\mathsf{fma}\left(\frac{50}{3}, \left(\log i \cdot \left(n \cdot \left(\left(\log i \cdot n\right) \cdot \left(\log i \cdot n\right)\right)\right)\right), \left(\mathsf{fma}\left(100, \left(\log i \cdot n\right), \left(\left(\log i \cdot \left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right) \cdot n\right)\right) \cdot 50 + 50 \cdot \left(\left(\log i \cdot n\right) \cdot \left(\log i \cdot n\right)\right)\right)\right)\right)\right)\right)\right) - \left(\mathsf{fma}\left(\frac{50}{3}, \left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right) \cdot n\right) \cdot \log n\right), \left(\mathsf{fma}\left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot \log i\right)\right), \frac{50}{3}, \left(100 \cdot \left(n \cdot \log n\right)\right)\right)\right)\right) + \left(\mathsf{fma}\left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot \log i\right)\right), \frac{100}{3}, \left(\left(\log i \cdot 50\right) \cdot \left(\log n \cdot \left(n \cdot n\right)\right)\right)\right) + \left(\log i \cdot 50\right) \cdot \left(\log n \cdot \left(n \cdot n\right)\right)\right)\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 7.203465032064257 \cdot 10^{+231}:\\
\;\;\;\;\frac{\frac{1}{\frac{i}{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}}}{\frac{1}{n}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(50, \left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right), \left(\mathsf{fma}\left(\frac{50}{3}, \left(\log i \cdot \left(n \cdot \left(\left(\log i \cdot n\right) \cdot \left(\log i \cdot n\right)\right)\right)\right), \left(\mathsf{fma}\left(100, \left(\log i \cdot n\right), \left(\left(\log i \cdot \left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right) \cdot n\right)\right) \cdot 50 + 50 \cdot \left(\left(\log i \cdot n\right) \cdot \left(\log i \cdot n\right)\right)\right)\right)\right)\right)\right)\right) - \left(\mathsf{fma}\left(\frac{50}{3}, \left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot \log n\right)\right) \cdot n\right) \cdot \log n\right), \left(\mathsf{fma}\left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot \log i\right)\right), \frac{50}{3}, \left(100 \cdot \left(n \cdot \log n\right)\right)\right)\right)\right) + \left(\mathsf{fma}\left(\left(\left(\left(n \cdot \log n\right) \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot \log i\right)\right), \frac{100}{3}, \left(\left(\log i \cdot 50\right) \cdot \left(\log n \cdot \left(n \cdot n\right)\right)\right)\right) + \left(\log i \cdot 50\right) \cdot \left(\log n \cdot \left(n \cdot n\right)\right)\right)\right)}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r31124399 = 100.0;
double r31124400 = 1.0;
double r31124401 = i;
double r31124402 = n;
double r31124403 = r31124401 / r31124402;
double r31124404 = r31124400 + r31124403;
double r31124405 = pow(r31124404, r31124402);
double r31124406 = r31124405 - r31124400;
double r31124407 = r31124406 / r31124403;
double r31124408 = r31124399 * r31124407;
return r31124408;
}
double f(double i, double n) {
double r31124409 = i;
double r31124410 = -1.967890440787981e-12;
bool r31124411 = r31124409 <= r31124410;
double r31124412 = 1.0;
double r31124413 = n;
double r31124414 = r31124409 / r31124413;
double r31124415 = r31124412 / r31124414;
double r31124416 = 100.0;
double r31124417 = log1p(r31124414);
double r31124418 = r31124417 * r31124413;
double r31124419 = exp(r31124418);
double r31124420 = -100.0;
double r31124421 = fma(r31124416, r31124419, r31124420);
double r31124422 = r31124415 * r31124421;
double r31124423 = 0.23936266726166916;
bool r31124424 = r31124409 <= r31124423;
double r31124425 = 16.666666666666668;
double r31124426 = 50.0;
double r31124427 = fma(r31124409, r31124425, r31124426);
double r31124428 = fma(r31124409, r31124427, r31124416);
double r31124429 = r31124409 * r31124428;
double r31124430 = r31124429 / r31124409;
double r31124431 = r31124412 / r31124413;
double r31124432 = r31124430 / r31124431;
double r31124433 = 4.0545436608851676e+138;
bool r31124434 = r31124409 <= r31124433;
double r31124435 = log(r31124413);
double r31124436 = r31124413 * r31124435;
double r31124437 = r31124436 * r31124436;
double r31124438 = log(r31124409);
double r31124439 = r31124438 * r31124413;
double r31124440 = r31124439 * r31124439;
double r31124441 = r31124413 * r31124440;
double r31124442 = r31124438 * r31124441;
double r31124443 = r31124437 * r31124413;
double r31124444 = r31124438 * r31124443;
double r31124445 = r31124444 * r31124426;
double r31124446 = r31124426 * r31124440;
double r31124447 = r31124445 + r31124446;
double r31124448 = fma(r31124416, r31124439, r31124447);
double r31124449 = fma(r31124425, r31124442, r31124448);
double r31124450 = fma(r31124426, r31124437, r31124449);
double r31124451 = r31124443 * r31124435;
double r31124452 = r31124413 * r31124413;
double r31124453 = r31124436 * r31124452;
double r31124454 = r31124438 * r31124438;
double r31124455 = r31124453 * r31124454;
double r31124456 = r31124416 * r31124436;
double r31124457 = fma(r31124455, r31124425, r31124456);
double r31124458 = fma(r31124425, r31124451, r31124457);
double r31124459 = 33.333333333333336;
double r31124460 = r31124438 * r31124426;
double r31124461 = r31124435 * r31124452;
double r31124462 = r31124460 * r31124461;
double r31124463 = fma(r31124455, r31124459, r31124462);
double r31124464 = r31124463 + r31124462;
double r31124465 = r31124458 + r31124464;
double r31124466 = r31124450 - r31124465;
double r31124467 = r31124466 / r31124414;
double r31124468 = 7.203465032064257e+231;
bool r31124469 = r31124409 <= r31124468;
double r31124470 = r31124414 + r31124412;
double r31124471 = pow(r31124470, r31124413);
double r31124472 = fma(r31124416, r31124471, r31124420);
double r31124473 = r31124409 / r31124472;
double r31124474 = r31124412 / r31124473;
double r31124475 = r31124474 / r31124431;
double r31124476 = r31124469 ? r31124475 : r31124467;
double r31124477 = r31124434 ? r31124467 : r31124476;
double r31124478 = r31124424 ? r31124432 : r31124477;
double r31124479 = r31124411 ? r31124422 : r31124478;
return r31124479;
}




Bits error versus i




Bits error versus n
| Original | 42.5 |
|---|---|
| Target | 41.6 |
| Herbie | 15.1 |
if i < -1.967890440787981e-12Initial program 29.5
Simplified29.4
rmApplied add-exp-log29.4
Applied pow-exp29.4
Simplified6.2
rmApplied div-inv6.3
if -1.967890440787981e-12 < i < 0.23936266726166916Initial program 49.9
Simplified49.9
rmApplied div-inv49.9
Applied associate-/r*50.1
Taylor expanded around 0 17.1
Simplified17.1
if 0.23936266726166916 < i < 4.0545436608851676e+138 or 7.203465032064257e+231 < i Initial program 33.3
Simplified33.3
rmApplied add-exp-log49.5
Applied pow-exp49.5
Simplified48.5
Taylor expanded around 0 18.0
Simplified18.0
if 4.0545436608851676e+138 < i < 7.203465032064257e+231Initial program 30.5
Simplified30.5
rmApplied div-inv30.5
Applied associate-/r*30.6
rmApplied *-un-lft-identity30.6
Applied associate-/l*30.6
Final simplification15.1
herbie shell --seed 2019124 +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))))