100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \leq -4.331633902717184 \cdot 10^{+28}:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\
\mathbf{elif}\;i \leq 0.051881246670273766:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{n \cdot \log 1 + \left(i \cdot \left(\sqrt[3]{1} + \sqrt[3]{1} \cdot \left(i \cdot \left(0.3333333333333333 - i \cdot 0.027777777777777776\right)\right)\right)\right) \cdot \sqrt[3]{1 + i \cdot 0.5}}{i} - n \cdot \left(i \cdot \left(\log 1 \cdot 0.5\right)\right)\right)\\
\mathbf{elif}\;i \leq 7.413989741085994 \cdot 10^{+291}:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{i}\right)\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\left(1 + \left(n \cdot \log 1 + i \cdot 1\right)\right) - 1}{\frac{i}{n}}\\
\end{array}(FPCore (i n) :precision binary64 (* 100.0 (/ (- (pow (+ 1.0 (/ i n)) n) 1.0) (/ i n))))
(FPCore (i n)
:precision binary64
(if (<= i -4.331633902717184e+28)
(* 100.0 (/ (- (pow (/ i n) n) 1.0) (/ i n)))
(if (<= i 0.051881246670273766)
(*
100.0
(-
(*
n
(/
(+
(* n (log 1.0))
(*
(*
i
(+
(cbrt 1.0)
(*
(cbrt 1.0)
(* i (- 0.3333333333333333 (* i 0.027777777777777776))))))
(cbrt (+ 1.0 (* i 0.5)))))
i))
(* n (* i (* (log 1.0) 0.5)))))
(if (<= i 7.413989741085994e+291)
(* 100.0 (* n (/ (- (pow (/ i n) n) 1.0) i)))
(* 100.0 (/ (- (+ 1.0 (+ (* n (log 1.0)) (* i 1.0))) 1.0) (/ i n)))))))double code(double i, double n) {
return ((double) (100.0 * (((double) (((double) pow(((double) (1.0 + (i / n))), n)) - 1.0)) / (i / n))));
}
double code(double i, double n) {
double tmp;
if ((i <= -4.331633902717184e+28)) {
tmp = ((double) (100.0 * (((double) (((double) pow((i / n), n)) - 1.0)) / (i / n))));
} else {
double tmp_1;
if ((i <= 0.051881246670273766)) {
tmp_1 = ((double) (100.0 * ((double) (((double) (n * (((double) (((double) (n * ((double) log(1.0)))) + ((double) (((double) (i * ((double) (((double) cbrt(1.0)) + ((double) (((double) cbrt(1.0)) * ((double) (i * ((double) (0.3333333333333333 - ((double) (i * 0.027777777777777776)))))))))))) * ((double) cbrt(((double) (1.0 + ((double) (i * 0.5)))))))))) / i))) - ((double) (n * ((double) (i * ((double) (((double) log(1.0)) * 0.5))))))))));
} else {
double tmp_2;
if ((i <= 7.413989741085994e+291)) {
tmp_2 = ((double) (100.0 * ((double) (n * (((double) (((double) pow((i / n), n)) - 1.0)) / i)))));
} else {
tmp_2 = ((double) (100.0 * (((double) (((double) (1.0 + ((double) (((double) (n * ((double) log(1.0)))) + ((double) (i * 1.0)))))) - 1.0)) / (i / n))));
}
tmp_1 = tmp_2;
}
tmp = tmp_1;
}
return tmp;
}




Bits error versus i




Bits error versus n
Results
| Original | 47.3 |
|---|---|
| Target | 46.9 |
| Herbie | 15.7 |
if i < -4.3316339027171839e28Initial program Error: 25.6 bits
Taylor expanded around inf Error: 64.0 bits
SimplifiedError: 17.0 bits
if -4.3316339027171839e28 < i < 0.051881246670273766Initial program Error: 57.8 bits
Taylor expanded around 0 Error: 27.8 bits
SimplifiedError: 27.8 bits
rmApplied associate-+r-Error: 27.8 bits
Applied associate-+r-Error: 27.8 bits
Applied div-subError: 27.8 bits
SimplifiedError: 27.0 bits
SimplifiedError: 11.8 bits
rmApplied add-cube-cbrtError: 11.8 bits
Applied associate-*r*Error: 11.8 bits
Taylor expanded around 0 Error: 11.7 bits
SimplifiedError: 11.7 bits
if 0.051881246670273766 < i < 7.4139897410859938e291Initial program Error: 31.5 bits
Taylor expanded around inf Error: 29.6 bits
SimplifiedError: 31.7 bits
if 7.4139897410859938e291 < i Initial program Error: 28.0 bits
Taylor expanded around 0 Error: 36.3 bits
SimplifiedError: 36.3 bits
Final simplificationError: 15.7 bits
herbie shell --seed 2020204
(FPCore (i n)
:name "Compound Interest"
:precision binary64
: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))))