100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -1.3884805748006013 \cdot 10^{+188}:\\
\;\;\;\;100 \cdot \left(n + \left(i \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot i\right)\right) \cdot n\right)\\
\mathbf{elif}\;n \le -2.0828329080055055 \cdot 10^{+53}:\\
\;\;\;\;\frac{100 \cdot \left({\left(1 + \frac{i}{n}\right)}^{n} - 1\right)}{\frac{i}{n}}\\
\mathbf{elif}\;n \le -4.3338040301615885:\\
\;\;\;\;100 \cdot \left(n + \left(i \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot i\right)\right) \cdot n\right)\\
\mathbf{elif}\;n \le 3.8315021415526975 \cdot 10^{-122}:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \left(n + \left(i \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot i\right)\right) \cdot n\right)\\
\end{array}double f(double i, double n) {
double r5570929 = 100.0;
double r5570930 = 1.0;
double r5570931 = i;
double r5570932 = n;
double r5570933 = r5570931 / r5570932;
double r5570934 = r5570930 + r5570933;
double r5570935 = pow(r5570934, r5570932);
double r5570936 = r5570935 - r5570930;
double r5570937 = r5570936 / r5570933;
double r5570938 = r5570929 * r5570937;
return r5570938;
}
double f(double i, double n) {
double r5570939 = n;
double r5570940 = -1.3884805748006013e+188;
bool r5570941 = r5570939 <= r5570940;
double r5570942 = 100.0;
double r5570943 = i;
double r5570944 = 0.5;
double r5570945 = 0.16666666666666666;
double r5570946 = r5570945 * r5570943;
double r5570947 = r5570944 + r5570946;
double r5570948 = r5570943 * r5570947;
double r5570949 = r5570948 * r5570939;
double r5570950 = r5570939 + r5570949;
double r5570951 = r5570942 * r5570950;
double r5570952 = -2.0828329080055055e+53;
bool r5570953 = r5570939 <= r5570952;
double r5570954 = 1.0;
double r5570955 = r5570943 / r5570939;
double r5570956 = r5570954 + r5570955;
double r5570957 = pow(r5570956, r5570939);
double r5570958 = r5570957 - r5570954;
double r5570959 = r5570942 * r5570958;
double r5570960 = r5570959 / r5570955;
double r5570961 = -4.3338040301615885;
bool r5570962 = r5570939 <= r5570961;
double r5570963 = 3.8315021415526975e-122;
bool r5570964 = r5570939 <= r5570963;
double r5570965 = 0.0;
double r5570966 = r5570964 ? r5570965 : r5570951;
double r5570967 = r5570962 ? r5570951 : r5570966;
double r5570968 = r5570953 ? r5570960 : r5570967;
double r5570969 = r5570941 ? r5570951 : r5570968;
return r5570969;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.5 |
|---|---|
| Target | 42.0 |
| Herbie | 22.2 |
if n < -1.3884805748006013e+188 or -2.0828329080055055e+53 < n < -4.3338040301615885 or 3.8315021415526975e-122 < n Initial program 55.5
Taylor expanded around 0 36.9
Simplified36.9
rmApplied associate-/r/19.6
Taylor expanded around inf 19.6
Simplified19.5
if -1.3884805748006013e+188 < n < -2.0828329080055055e+53Initial program 39.5
rmApplied associate-*r/39.5
if -4.3338040301615885 < n < 3.8315021415526975e-122Initial program 25.3
rmApplied associate-*r/25.3
Taylor expanded around 0 18.9
Final simplification22.2
herbie shell --seed 2019133
(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))))