100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -3.143171245412234223671663589649849512853 \cdot 10^{-8}:\\
\;\;\;\;\frac{100 \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le -6.202175580399479749610806763177730589725 \cdot 10^{-257}:\\
\;\;\;\;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)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 1.789886679054524215845529450016829481257 \cdot 10^{-195}:\\
\;\;\;\;100 \cdot \left(\frac{\frac{1}{\sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)} \cdot \sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}}}{\sqrt[3]{i} \cdot \sqrt[3]{i}} \cdot \left(\frac{\frac{{\left(1 + \frac{i}{n}\right)}^{\left(4 \cdot n\right)} - 1 \cdot {1}^{3}}{\left({\left(1 + \frac{i}{n}\right)}^{n} + 1\right) \cdot \sqrt[3]{\mathsf{fma}\left(1, 1, {\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}\right)}}}{\sqrt[3]{i}} \cdot n\right)\right)\\
\mathbf{elif}\;i \le 85896130569.3759002685546875:\\
\;\;\;\;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)}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \left(\frac{\frac{{\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)}}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}} - \frac{\frac{1 \cdot 1}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\right)\\
\end{array}double f(double i, double n) {
double r229320 = 100.0;
double r229321 = 1.0;
double r229322 = i;
double r229323 = n;
double r229324 = r229322 / r229323;
double r229325 = r229321 + r229324;
double r229326 = pow(r229325, r229323);
double r229327 = r229326 - r229321;
double r229328 = r229327 / r229324;
double r229329 = r229320 * r229328;
return r229329;
}
double f(double i, double n) {
double r229330 = i;
double r229331 = -3.143171245412234e-08;
bool r229332 = r229330 <= r229331;
double r229333 = 100.0;
double r229334 = n;
double r229335 = r229330 / r229334;
double r229336 = pow(r229335, r229334);
double r229337 = 1.0;
double r229338 = r229336 - r229337;
double r229339 = r229333 * r229338;
double r229340 = r229339 / r229335;
double r229341 = -6.20217558039948e-257;
bool r229342 = r229330 <= r229341;
double r229343 = 0.5;
double r229344 = 2.0;
double r229345 = pow(r229330, r229344);
double r229346 = log(r229337);
double r229347 = r229346 * r229334;
double r229348 = fma(r229343, r229345, r229347);
double r229349 = fma(r229337, r229330, r229348);
double r229350 = r229345 * r229346;
double r229351 = r229343 * r229350;
double r229352 = r229349 - r229351;
double r229353 = r229352 / r229335;
double r229354 = r229333 * r229353;
double r229355 = 1.7898866790545242e-195;
bool r229356 = r229330 <= r229355;
double r229357 = 1.0;
double r229358 = r229337 + r229335;
double r229359 = r229344 * r229334;
double r229360 = pow(r229358, r229359);
double r229361 = fma(r229337, r229337, r229360);
double r229362 = cbrt(r229361);
double r229363 = r229362 * r229362;
double r229364 = r229357 / r229363;
double r229365 = cbrt(r229330);
double r229366 = r229365 * r229365;
double r229367 = r229364 / r229366;
double r229368 = 4.0;
double r229369 = r229368 * r229334;
double r229370 = pow(r229358, r229369);
double r229371 = 3.0;
double r229372 = pow(r229337, r229371);
double r229373 = r229337 * r229372;
double r229374 = r229370 - r229373;
double r229375 = pow(r229358, r229334);
double r229376 = r229375 + r229337;
double r229377 = r229376 * r229362;
double r229378 = r229374 / r229377;
double r229379 = r229378 / r229365;
double r229380 = r229379 * r229334;
double r229381 = r229367 * r229380;
double r229382 = r229333 * r229381;
double r229383 = 85896130569.3759;
bool r229384 = r229330 <= r229383;
double r229385 = r229360 / r229376;
double r229386 = r229385 / r229335;
double r229387 = r229337 * r229337;
double r229388 = r229387 / r229376;
double r229389 = r229388 / r229335;
double r229390 = r229386 - r229389;
double r229391 = r229333 * r229390;
double r229392 = r229384 ? r229354 : r229391;
double r229393 = r229356 ? r229382 : r229392;
double r229394 = r229342 ? r229354 : r229393;
double r229395 = r229332 ? r229340 : r229394;
return r229395;
}




Bits error versus i




Bits error versus n
| Original | 42.5 |
|---|---|
| Target | 42.4 |
| Herbie | 31.3 |
if i < -3.143171245412234e-08Initial program 27.6
Taylor expanded around inf 64.0
Simplified19.0
if -3.143171245412234e-08 < i < -6.20217558039948e-257 or 1.7898866790545242e-195 < i < 85896130569.3759Initial program 51.1
Taylor expanded around 0 31.2
Simplified31.2
if -6.20217558039948e-257 < i < 1.7898866790545242e-195Initial program 48.7
rmApplied flip--48.7
Simplified48.7
rmApplied flip--48.7
Simplified48.7
Simplified48.7
rmApplied *-un-lft-identity48.7
Applied add-cube-cbrt48.7
Applied times-frac48.7
Applied *-un-lft-identity48.7
Applied add-cube-cbrt48.7
Applied *-un-lft-identity48.7
Applied times-frac48.7
Applied times-frac48.7
Applied times-frac48.3
Simplified48.3
Simplified48.1
if 85896130569.3759 < i Initial program 30.6
rmApplied flip--30.6
Simplified30.6
rmApplied div-sub30.6
Applied div-sub30.6
Final simplification31.3
herbie shell --seed 2019303 +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))))