100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -2.8864238159165176 \cdot 10^{-08}:\\
\;\;\;\;100 \cdot \frac{e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 7.15448981312837 \cdot 10^{-86}:\\
\;\;\;\;100 \cdot \left(n \cdot \mathsf{fma}\left(\left(\mathsf{fma}\left(\frac{1}{6}, i, \frac{1}{2}\right)\right), i, 1\right)\right)\\
\mathbf{elif}\;i \le 1.5900402459407238 \cdot 10^{-78}:\\
\;\;\;\;100 \cdot \frac{\mathsf{expm1}\left(\left(n \cdot \log \left(\frac{i}{n} + 1\right)\right)\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 516.8120698284489:\\
\;\;\;\;100 \cdot \left(n \cdot \mathsf{fma}\left(\left(\mathsf{fma}\left(\frac{1}{6}, i, \frac{1}{2}\right)\right), i, 1\right)\right)\\
\mathbf{elif}\;i \le 1.087190514253047 \cdot 10^{+133}:\\
\;\;\;\;\frac{n \cdot \mathsf{expm1}\left(\left(\left(\log i - \log n\right) \cdot n\right)\right)}{\frac{i}{100}}\\
\mathbf{elif}\;i \le 1.6189234541938694 \cdot 10^{+242}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left({\left(\frac{\frac{-1}{n}}{\frac{-1}{i}}\right)}^{n}\right), 100, -100\right)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\frac{n \cdot \mathsf{expm1}\left(\left(\left(\log i - \log n\right) \cdot n\right)\right)}{\frac{i}{100}}\\
\end{array}double f(double i, double n) {
double r47920495 = 100.0;
double r47920496 = 1.0;
double r47920497 = i;
double r47920498 = n;
double r47920499 = r47920497 / r47920498;
double r47920500 = r47920496 + r47920499;
double r47920501 = pow(r47920500, r47920498);
double r47920502 = r47920501 - r47920496;
double r47920503 = r47920502 / r47920499;
double r47920504 = r47920495 * r47920503;
return r47920504;
}
double f(double i, double n) {
double r47920505 = i;
double r47920506 = -2.8864238159165176e-08;
bool r47920507 = r47920505 <= r47920506;
double r47920508 = 100.0;
double r47920509 = n;
double r47920510 = r47920505 / r47920509;
double r47920511 = log1p(r47920510);
double r47920512 = r47920511 * r47920509;
double r47920513 = exp(r47920512);
double r47920514 = 1.0;
double r47920515 = r47920513 - r47920514;
double r47920516 = r47920515 / r47920510;
double r47920517 = r47920508 * r47920516;
double r47920518 = 7.15448981312837e-86;
bool r47920519 = r47920505 <= r47920518;
double r47920520 = 0.16666666666666666;
double r47920521 = 0.5;
double r47920522 = fma(r47920520, r47920505, r47920521);
double r47920523 = fma(r47920522, r47920505, r47920514);
double r47920524 = r47920509 * r47920523;
double r47920525 = r47920508 * r47920524;
double r47920526 = 1.5900402459407238e-78;
bool r47920527 = r47920505 <= r47920526;
double r47920528 = r47920510 + r47920514;
double r47920529 = log(r47920528);
double r47920530 = r47920509 * r47920529;
double r47920531 = expm1(r47920530);
double r47920532 = r47920531 / r47920510;
double r47920533 = r47920508 * r47920532;
double r47920534 = 516.8120698284489;
bool r47920535 = r47920505 <= r47920534;
double r47920536 = 1.087190514253047e+133;
bool r47920537 = r47920505 <= r47920536;
double r47920538 = log(r47920505);
double r47920539 = log(r47920509);
double r47920540 = r47920538 - r47920539;
double r47920541 = r47920540 * r47920509;
double r47920542 = expm1(r47920541);
double r47920543 = r47920509 * r47920542;
double r47920544 = r47920505 / r47920508;
double r47920545 = r47920543 / r47920544;
double r47920546 = 1.6189234541938694e+242;
bool r47920547 = r47920505 <= r47920546;
double r47920548 = -1.0;
double r47920549 = r47920548 / r47920509;
double r47920550 = r47920548 / r47920505;
double r47920551 = r47920549 / r47920550;
double r47920552 = pow(r47920551, r47920509);
double r47920553 = -100.0;
double r47920554 = fma(r47920552, r47920508, r47920553);
double r47920555 = r47920554 / r47920510;
double r47920556 = r47920547 ? r47920555 : r47920545;
double r47920557 = r47920537 ? r47920545 : r47920556;
double r47920558 = r47920535 ? r47920525 : r47920557;
double r47920559 = r47920527 ? r47920533 : r47920558;
double r47920560 = r47920519 ? r47920525 : r47920559;
double r47920561 = r47920507 ? r47920517 : r47920560;
return r47920561;
}




Bits error versus i




Bits error versus n
| Original | 42.1 |
|---|---|
| Target | 41.6 |
| Herbie | 15.7 |
if i < -2.8864238159165176e-08Initial program 28.5
rmApplied add-exp-log28.6
Applied pow-exp28.6
Simplified5.8
if -2.8864238159165176e-08 < i < 7.15448981312837e-86 or 1.5900402459407238e-78 < i < 516.8120698284489Initial program 49.2
Taylor expanded around 0 34.0
Simplified34.0
rmApplied associate-/r/18.0
Simplified18.0
if 7.15448981312837e-86 < i < 1.5900402459407238e-78Initial program 49.1
rmApplied pow-to-exp49.1
Applied expm1-def36.5
if 516.8120698284489 < i < 1.087190514253047e+133 or 1.6189234541938694e+242 < i Initial program 33.4
Taylor expanded around inf 27.3
Simplified15.6
if 1.087190514253047e+133 < i < 1.6189234541938694e+242Initial program 32.4
Taylor expanded around -inf 62.8
Simplified32.3
Final simplification15.7
herbie shell --seed 2019125 +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))))