100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -4.726437827530884962234924984159079031087 \cdot 10^{-4}:\\
\;\;\;\;100 \cdot \frac{\frac{\frac{{\left({\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}^{3} + {\left(-1 \cdot 1\right)}^{3}}{\left(-1 \cdot 1\right) \cdot \left(\left(-1 \cdot 1\right) - {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right) + {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot \left(2 \cdot n\right)\right)}}}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\\
\mathbf{elif}\;i \le -1.964684591502211290172320573095869134171 \cdot 10^{-206}:\\
\;\;\;\;100 \cdot \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)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le -2.882850856787981581879145472439421418808 \cdot 10^{-226}:\\
\;\;\;\;\left(100 \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1} \cdot \sqrt[3]{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n}}\right) - 1}}{i}\right) \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1}}{\frac{1}{n}}\\
\mathbf{elif}\;i \le -1.019093496626147386492788288826940719188 \cdot 10^{-241}:\\
\;\;\;\;100 \cdot \frac{\frac{2 \cdot \left(i + {i}^{2}\right) + \left(2 \cdot \left(\log 1 \cdot n\right) - 2 \cdot \left({i}^{2} \cdot \log 1\right)\right)}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\\
\mathbf{elif}\;i \le -3.645341750186080323375566759305922898034 \cdot 10^{-293}:\\
\;\;\;\;\left(100 \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1} \cdot \sqrt[3]{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n}}\right) - 1}}{i}\right) \cdot \frac{\sqrt[3]{{\left(1 + \frac{i}{n}\right)}^{n} - 1}}{\frac{1}{n}}\\
\mathbf{elif}\;i \le 9.27900448690603418810951552586629986763:\\
\;\;\;\;100 \cdot \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)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\frac{\frac{{\left({\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}^{3} + {\left(-1 \cdot 1\right)}^{3}}{\left(-1 \cdot 1\right) \cdot \left(\left(-1 \cdot 1\right) - {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right) + {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot \left(2 \cdot n\right)\right)}}}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r171382 = 100.0;
double r171383 = 1.0;
double r171384 = i;
double r171385 = n;
double r171386 = r171384 / r171385;
double r171387 = r171383 + r171386;
double r171388 = pow(r171387, r171385);
double r171389 = r171388 - r171383;
double r171390 = r171389 / r171386;
double r171391 = r171382 * r171390;
return r171391;
}
double f(double i, double n) {
double r171392 = i;
double r171393 = -0.0004726437827530885;
bool r171394 = r171392 <= r171393;
double r171395 = 100.0;
double r171396 = 1.0;
double r171397 = n;
double r171398 = r171392 / r171397;
double r171399 = r171396 + r171398;
double r171400 = 2.0;
double r171401 = r171400 * r171397;
double r171402 = pow(r171399, r171401);
double r171403 = 3.0;
double r171404 = pow(r171402, r171403);
double r171405 = r171396 * r171396;
double r171406 = -r171405;
double r171407 = pow(r171406, r171403);
double r171408 = r171404 + r171407;
double r171409 = r171406 - r171402;
double r171410 = r171406 * r171409;
double r171411 = r171400 * r171401;
double r171412 = pow(r171399, r171411);
double r171413 = r171410 + r171412;
double r171414 = r171408 / r171413;
double r171415 = pow(r171399, r171397);
double r171416 = r171415 + r171396;
double r171417 = r171414 / r171416;
double r171418 = r171417 / r171398;
double r171419 = r171395 * r171418;
double r171420 = -1.9646845915022113e-206;
bool r171421 = r171392 <= r171420;
double r171422 = r171396 * r171392;
double r171423 = 0.5;
double r171424 = pow(r171392, r171400);
double r171425 = r171423 * r171424;
double r171426 = log(r171396);
double r171427 = r171426 * r171397;
double r171428 = r171425 + r171427;
double r171429 = r171422 + r171428;
double r171430 = r171424 * r171426;
double r171431 = r171423 * r171430;
double r171432 = r171429 - r171431;
double r171433 = r171432 / r171398;
double r171434 = r171395 * r171433;
double r171435 = -2.8828508567879816e-226;
bool r171436 = r171392 <= r171435;
double r171437 = r171415 - r171396;
double r171438 = cbrt(r171437);
double r171439 = exp(r171415);
double r171440 = log(r171439);
double r171441 = r171440 - r171396;
double r171442 = cbrt(r171441);
double r171443 = r171438 * r171442;
double r171444 = r171443 / r171392;
double r171445 = r171395 * r171444;
double r171446 = 1.0;
double r171447 = r171446 / r171397;
double r171448 = r171438 / r171447;
double r171449 = r171445 * r171448;
double r171450 = -1.0190934966261474e-241;
bool r171451 = r171392 <= r171450;
double r171452 = 2.0;
double r171453 = r171392 + r171424;
double r171454 = r171452 * r171453;
double r171455 = r171400 * r171427;
double r171456 = r171452 * r171430;
double r171457 = r171455 - r171456;
double r171458 = r171454 + r171457;
double r171459 = r171458 / r171416;
double r171460 = r171459 / r171398;
double r171461 = r171395 * r171460;
double r171462 = -3.6453417501860803e-293;
bool r171463 = r171392 <= r171462;
double r171464 = 9.279004486906034;
bool r171465 = r171392 <= r171464;
double r171466 = r171465 ? r171434 : r171419;
double r171467 = r171463 ? r171449 : r171466;
double r171468 = r171451 ? r171461 : r171467;
double r171469 = r171436 ? r171449 : r171468;
double r171470 = r171421 ? r171434 : r171469;
double r171471 = r171394 ? r171419 : r171470;
return r171471;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.3 |
|---|---|
| Target | 42.6 |
| Herbie | 32.9 |
if i < -0.0004726437827530885 or 9.279004486906034 < i Initial program 29.1
rmApplied flip--29.1
Simplified29.1
rmApplied flip3-+29.1
Simplified29.1
if -0.0004726437827530885 < i < -1.9646845915022113e-206 or -3.6453417501860803e-293 < i < 9.279004486906034Initial program 50.8
Taylor expanded around 0 33.1
if -1.9646845915022113e-206 < i < -2.8828508567879816e-226 or -1.0190934966261474e-241 < i < -3.6453417501860803e-293Initial program 47.7
rmApplied div-inv47.7
Applied add-cube-cbrt47.7
Applied times-frac47.1
Applied associate-*r*47.1
rmApplied add-log-exp47.1
if -2.8828508567879816e-226 < i < -1.0190934966261474e-241Initial program 46.5
rmApplied flip--46.5
Simplified46.5
Taylor expanded around 0 42.2
Simplified42.2
Final simplification32.9
herbie shell --seed 2020002
(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))))