100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -1.8239091289757303 \cdot 10^{+82}:\\
\;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\
\mathbf{elif}\;n \le -8.076739568312811 \cdot 10^{-20}:\\
\;\;\;\;\frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}} \cdot 100\\
\mathbf{elif}\;n \le 2.9484870312088923 \cdot 10^{-181}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\
\end{array}double f(double i, double n) {
double r5371829 = 100.0;
double r5371830 = 1.0;
double r5371831 = i;
double r5371832 = n;
double r5371833 = r5371831 / r5371832;
double r5371834 = r5371830 + r5371833;
double r5371835 = pow(r5371834, r5371832);
double r5371836 = r5371835 - r5371830;
double r5371837 = r5371836 / r5371833;
double r5371838 = r5371829 * r5371837;
return r5371838;
}
double f(double i, double n) {
double r5371839 = n;
double r5371840 = -1.8239091289757303e+82;
bool r5371841 = r5371839 <= r5371840;
double r5371842 = 0.5;
double r5371843 = i;
double r5371844 = 0.16666666666666666;
double r5371845 = r5371843 * r5371844;
double r5371846 = r5371842 + r5371845;
double r5371847 = r5371846 * r5371843;
double r5371848 = 1.0;
double r5371849 = r5371847 + r5371848;
double r5371850 = /* ERROR: no posit support in C */;
double r5371851 = /* ERROR: no posit support in C */;
double r5371852 = r5371851 * r5371839;
double r5371853 = 100.0;
double r5371854 = r5371852 * r5371853;
double r5371855 = -8.076739568312811e-20;
bool r5371856 = r5371839 <= r5371855;
double r5371857 = r5371843 / r5371839;
double r5371858 = r5371848 + r5371857;
double r5371859 = pow(r5371858, r5371839);
double r5371860 = r5371859 - r5371848;
double r5371861 = exp(r5371860);
double r5371862 = log(r5371861);
double r5371863 = r5371862 / r5371857;
double r5371864 = r5371863 * r5371853;
double r5371865 = 2.9484870312088923e-181;
bool r5371866 = r5371839 <= r5371865;
double r5371867 = 0.0;
double r5371868 = r5371866 ? r5371867 : r5371854;
double r5371869 = r5371856 ? r5371864 : r5371868;
double r5371870 = r5371841 ? r5371854 : r5371869;
return r5371870;
}




Bits error versus i




Bits error versus n
| Original | 42.3 |
|---|---|
| Target | 42.0 |
| Herbie | 20.7 |
if n < -1.8239091289757303e+82 or 2.9484870312088923e-181 < n Initial program 54.4
Taylor expanded around 0 38.0
Simplified38.0
rmApplied associate-/r/21.2
rmApplied insert-posit1621.4
Simplified21.4
Taylor expanded around inf 21.3
Simplified21.3
if -1.8239091289757303e+82 < n < -8.076739568312811e-20Initial program 32.1
rmApplied add-log-exp32.1
if -8.076739568312811e-20 < n < 2.9484870312088923e-181Initial program 21.4
Taylor expanded around 0 15.1
Final simplification20.7
herbie shell --seed 2019138
(FPCore (i n)
:name "Compound Interest"
: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))))