100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -743560.0364592294208705425262451171875:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{\left(\left(i \cdot i\right) \cdot 0.5 - \left(\left(i \cdot i\right) \cdot 0.5\right) \cdot \log 1\right) + \left(i \cdot 1 + \log 1 \cdot n\right)}{i}\right)\\
\mathbf{elif}\;n \le -2.730403974900932650671053560507976027298 \cdot 10^{-303}:\\
\;\;\;\;100 \cdot \frac{\frac{\left({\left(1 + \frac{i}{n}\right)}^{n} \cdot {\left(1 + \frac{i}{n}\right)}^{n}\right) \cdot {\left(1 + \frac{i}{n}\right)}^{n} - 1 \cdot \left(1 \cdot 1\right)}{\left(1 + {\left(1 + \frac{i}{n}\right)}^{n}\right) \cdot 1 + {\left(1 + \frac{i}{n}\right)}^{n} \cdot {\left(1 + \frac{i}{n}\right)}^{n}}}{\frac{i}{n}}\\
\mathbf{elif}\;n \le 5.492513693153940784790669261791516735088 \cdot 10^{-150}:\\
\;\;\;\;100 \cdot \frac{\left(\log 1 \cdot n + \left(1 + i \cdot 1\right)\right) - 1}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{\left(\left(i \cdot i\right) \cdot 0.5 - \left(\left(i \cdot i\right) \cdot 0.5\right) \cdot \log 1\right) + \left(i \cdot 1 + \log 1 \cdot n\right)}{i}\right)\\
\end{array}double f(double i, double n) {
double r8613317 = 100.0;
double r8613318 = 1.0;
double r8613319 = i;
double r8613320 = n;
double r8613321 = r8613319 / r8613320;
double r8613322 = r8613318 + r8613321;
double r8613323 = pow(r8613322, r8613320);
double r8613324 = r8613323 - r8613318;
double r8613325 = r8613324 / r8613321;
double r8613326 = r8613317 * r8613325;
return r8613326;
}
double f(double i, double n) {
double r8613327 = n;
double r8613328 = -743560.0364592294;
bool r8613329 = r8613327 <= r8613328;
double r8613330 = 100.0;
double r8613331 = i;
double r8613332 = r8613331 * r8613331;
double r8613333 = 0.5;
double r8613334 = r8613332 * r8613333;
double r8613335 = 1.0;
double r8613336 = log(r8613335);
double r8613337 = r8613334 * r8613336;
double r8613338 = r8613334 - r8613337;
double r8613339 = r8613331 * r8613335;
double r8613340 = r8613336 * r8613327;
double r8613341 = r8613339 + r8613340;
double r8613342 = r8613338 + r8613341;
double r8613343 = r8613342 / r8613331;
double r8613344 = r8613327 * r8613343;
double r8613345 = r8613330 * r8613344;
double r8613346 = -2.7304039749009327e-303;
bool r8613347 = r8613327 <= r8613346;
double r8613348 = r8613331 / r8613327;
double r8613349 = r8613335 + r8613348;
double r8613350 = pow(r8613349, r8613327);
double r8613351 = r8613350 * r8613350;
double r8613352 = r8613351 * r8613350;
double r8613353 = r8613335 * r8613335;
double r8613354 = r8613335 * r8613353;
double r8613355 = r8613352 - r8613354;
double r8613356 = r8613335 + r8613350;
double r8613357 = r8613356 * r8613335;
double r8613358 = r8613357 + r8613351;
double r8613359 = r8613355 / r8613358;
double r8613360 = r8613359 / r8613348;
double r8613361 = r8613330 * r8613360;
double r8613362 = 5.492513693153941e-150;
bool r8613363 = r8613327 <= r8613362;
double r8613364 = 1.0;
double r8613365 = r8613364 + r8613339;
double r8613366 = r8613340 + r8613365;
double r8613367 = r8613366 - r8613335;
double r8613368 = r8613367 / r8613348;
double r8613369 = r8613330 * r8613368;
double r8613370 = r8613363 ? r8613369 : r8613345;
double r8613371 = r8613347 ? r8613361 : r8613370;
double r8613372 = r8613329 ? r8613345 : r8613371;
return r8613372;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.9 |
|---|---|
| Target | 42.3 |
| Herbie | 22.3 |
if n < -743560.0364592294 or 5.492513693153941e-150 < n Initial program 52.4
Taylor expanded around 0 39.6
Simplified39.6
rmApplied associate-/r/23.5
if -743560.0364592294 < n < -2.7304039749009327e-303Initial program 15.9
rmApplied flip3--15.9
Simplified15.9
Simplified15.9
if -2.7304039749009327e-303 < n < 5.492513693153941e-150Initial program 42.1
Taylor expanded around 0 28.1
Final simplification22.3
herbie shell --seed 2019169
(FPCore (i n)
:name "Compound Interest"
:herbie-target
(* 100.0 (/ (- (exp (* n (if (== (+ 1.0 (/ i n)) 1.0) (/ i n) (/ (* (/ i n) (log (+ 1.0 (/ i n)))) (- (+ (/ i n) 1.0) 1.0))))) 1.0) (/ i n)))
(* 100.0 (/ (- (pow (+ 1.0 (/ i n)) n) 1.0) (/ i n))))