100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -0.9131486383075666513065016260952688753605:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 0.1038740591284738334909576451536850072443:\\
\;\;\;\;100 \cdot \left(\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)}{i} \cdot n\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{100}{i} \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r104285 = 100.0;
double r104286 = 1.0;
double r104287 = i;
double r104288 = n;
double r104289 = r104287 / r104288;
double r104290 = r104286 + r104289;
double r104291 = pow(r104290, r104288);
double r104292 = r104291 - r104286;
double r104293 = r104292 / r104289;
double r104294 = r104285 * r104293;
return r104294;
}
double f(double i, double n) {
double r104295 = i;
double r104296 = -0.9131486383075667;
bool r104297 = r104295 <= r104296;
double r104298 = 100.0;
double r104299 = n;
double r104300 = r104295 / r104299;
double r104301 = pow(r104300, r104299);
double r104302 = 1.0;
double r104303 = r104301 - r104302;
double r104304 = r104303 / r104300;
double r104305 = r104298 * r104304;
double r104306 = 0.10387405912847383;
bool r104307 = r104295 <= r104306;
double r104308 = r104302 * r104295;
double r104309 = 0.5;
double r104310 = 2.0;
double r104311 = pow(r104295, r104310);
double r104312 = r104309 * r104311;
double r104313 = log(r104302);
double r104314 = r104313 * r104299;
double r104315 = r104312 + r104314;
double r104316 = r104308 + r104315;
double r104317 = r104311 * r104313;
double r104318 = r104309 * r104317;
double r104319 = r104316 - r104318;
double r104320 = r104319 / r104295;
double r104321 = r104320 * r104299;
double r104322 = r104298 * r104321;
double r104323 = r104298 / r104295;
double r104324 = r104302 + r104300;
double r104325 = pow(r104324, r104299);
double r104326 = r104325 - r104302;
double r104327 = 1.0;
double r104328 = r104327 / r104299;
double r104329 = r104326 / r104328;
double r104330 = r104323 * r104329;
double r104331 = r104307 ? r104322 : r104330;
double r104332 = r104297 ? r104305 : r104331;
return r104332;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.1 |
|---|---|
| Target | 43.0 |
| Herbie | 19.2 |
if i < -0.9131486383075667Initial program 28.1
Taylor expanded around inf 64.0
Simplified18.7
if -0.9131486383075667 < i < 0.10387405912847383Initial program 50.8
Taylor expanded around 0 33.3
rmApplied associate-/r/16.4
if 0.10387405912847383 < i Initial program 32.5
rmApplied div-inv32.5
Applied *-un-lft-identity32.5
Applied times-frac32.6
Applied associate-*r*32.6
Simplified32.5
Final simplification19.2
herbie shell --seed 2019304
(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))))