100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -7.524185979796087207979591237813621340536 \cdot 10^{-8}:\\
\;\;\;\;100 \cdot \frac{\frac{{\left(\frac{i}{n} + 1\right)}^{n} \cdot \left({\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right) - \left(1 \cdot 1\right) \cdot 1}{{\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n} + \left(1 + {\left(\frac{i}{n} + 1\right)}^{n}\right) \cdot 1}}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 1.943238893158424573925913136918097734451:\\
\;\;\;\;100 \cdot \left(n \cdot \frac{i \cdot 1 + \left(i \cdot \left(0.5 \cdot i\right) + \left(n - i \cdot \left(0.5 \cdot i\right)\right) \cdot \log 1\right)}{i}\right)\\
\mathbf{elif}\;i \le 1.540498293983815894197419121524134450797 \cdot 10^{208}:\\
\;\;\;\;\left(\frac{{\left(\frac{i}{n} + 1\right)}^{n}}{\frac{i}{n}} - \frac{1}{\frac{i}{n}}\right) \cdot 100\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\left(n \cdot \log 1 + \left(i \cdot 1 + 1\right)\right) - 1}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r7418663 = 100.0;
double r7418664 = 1.0;
double r7418665 = i;
double r7418666 = n;
double r7418667 = r7418665 / r7418666;
double r7418668 = r7418664 + r7418667;
double r7418669 = pow(r7418668, r7418666);
double r7418670 = r7418669 - r7418664;
double r7418671 = r7418670 / r7418667;
double r7418672 = r7418663 * r7418671;
return r7418672;
}
double f(double i, double n) {
double r7418673 = i;
double r7418674 = -7.524185979796087e-08;
bool r7418675 = r7418673 <= r7418674;
double r7418676 = 100.0;
double r7418677 = n;
double r7418678 = r7418673 / r7418677;
double r7418679 = 1.0;
double r7418680 = r7418678 + r7418679;
double r7418681 = pow(r7418680, r7418677);
double r7418682 = r7418681 * r7418681;
double r7418683 = r7418681 * r7418682;
double r7418684 = r7418679 * r7418679;
double r7418685 = r7418684 * r7418679;
double r7418686 = r7418683 - r7418685;
double r7418687 = r7418679 + r7418681;
double r7418688 = r7418687 * r7418679;
double r7418689 = r7418682 + r7418688;
double r7418690 = r7418686 / r7418689;
double r7418691 = r7418690 / r7418678;
double r7418692 = r7418676 * r7418691;
double r7418693 = 1.9432388931584246;
bool r7418694 = r7418673 <= r7418693;
double r7418695 = r7418673 * r7418679;
double r7418696 = 0.5;
double r7418697 = r7418696 * r7418673;
double r7418698 = r7418673 * r7418697;
double r7418699 = r7418677 - r7418698;
double r7418700 = log(r7418679);
double r7418701 = r7418699 * r7418700;
double r7418702 = r7418698 + r7418701;
double r7418703 = r7418695 + r7418702;
double r7418704 = r7418703 / r7418673;
double r7418705 = r7418677 * r7418704;
double r7418706 = r7418676 * r7418705;
double r7418707 = 1.540498293983816e+208;
bool r7418708 = r7418673 <= r7418707;
double r7418709 = r7418681 / r7418678;
double r7418710 = r7418679 / r7418678;
double r7418711 = r7418709 - r7418710;
double r7418712 = r7418711 * r7418676;
double r7418713 = r7418677 * r7418700;
double r7418714 = 1.0;
double r7418715 = r7418695 + r7418714;
double r7418716 = r7418713 + r7418715;
double r7418717 = r7418716 - r7418679;
double r7418718 = r7418717 / r7418678;
double r7418719 = r7418676 * r7418718;
double r7418720 = r7418708 ? r7418712 : r7418719;
double r7418721 = r7418694 ? r7418706 : r7418720;
double r7418722 = r7418675 ? r7418692 : r7418721;
return r7418722;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.9 |
|---|---|
| Target | 42.1 |
| Herbie | 22.2 |
if i < -7.524185979796087e-08Initial program 30.2
rmApplied flip3--30.2
Simplified30.2
Simplified30.2
if -7.524185979796087e-08 < i < 1.9432388931584246Initial program 50.4
Taylor expanded around 0 34.1
Simplified34.1
rmApplied associate-/r/17.0
Simplified17.0
if 1.9432388931584246 < i < 1.540498293983816e+208Initial program 30.7
rmApplied div-sub30.7
if 1.540498293983816e+208 < i Initial program 31.8
Taylor expanded around 0 34.0
Final simplification22.2
herbie shell --seed 2019171
(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))))