100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}
\begin{array}{l}
\mathbf{if}\;i \leq -1.2241496397660598 \cdot 10^{-10}:\\
\;\;\;\;n \cdot \frac{\mathsf{fma}\left(100, e^{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}, -100\right)}{i}\\
\mathbf{elif}\;i \leq 0.8920348598017706:\\
\;\;\;\;\mathsf{fma}\left(16.666666666666668, n \cdot \left(i \cdot i\right), \mathsf{fma}\left(n, 100, \mathsf{fma}\left(\frac{i \cdot i}{n}, 33.333333333333336, 50 \cdot \left(i \cdot n\right)\right)\right)\right) - 50 \cdot \left(i + i \cdot i\right)\\
\mathbf{else}:\\
\;\;\;\;n \cdot \frac{\mathsf{fma}\left(100, {\left(\frac{i}{n} + 1\right)}^{n}, -100\right)}{i}\\
\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 -1.2241496397660598e-10)
(* n (/ (fma 100.0 (exp (* n (log1p (/ i n)))) -100.0) i))
(if (<= i 0.8920348598017706)
(-
(fma
16.666666666666668
(* n (* i i))
(fma n 100.0 (fma (/ (* i i) n) 33.333333333333336 (* 50.0 (* i n)))))
(* 50.0 (+ i (* i i))))
(* n (/ (fma 100.0 (pow (+ (/ i n) 1.0) n) -100.0) i)))))double code(double i, double n) {
return 100.0 * ((pow((1.0 + (i / n)), n) - 1.0) / (i / n));
}
double code(double i, double n) {
double tmp;
if (i <= -1.2241496397660598e-10) {
tmp = n * (fma(100.0, exp(n * log1p(i / n)), -100.0) / i);
} else if (i <= 0.8920348598017706) {
tmp = fma(16.666666666666668, (n * (i * i)), fma(n, 100.0, fma(((i * i) / n), 33.333333333333336, (50.0 * (i * n))))) - (50.0 * (i + (i * i)));
} else {
tmp = n * (fma(100.0, pow(((i / n) + 1.0), n), -100.0) / i);
}
return tmp;
}




Bits error versus i




Bits error versus n
| Original | 47.8 |
|---|---|
| Target | 47.8 |
| Herbie | 11.5 |
if i < -1.2241496397660598e-10Initial program 27.8
Simplified28.6
Applied pow-to-exp_binary6428.6
Simplified6.9
if -1.2241496397660598e-10 < i < 0.892034859801770552Initial program 58.4
Simplified58.1
Taylor expanded in i around 0 8.8
Simplified8.8
if 0.892034859801770552 < i Initial program 32.7
Simplified32.7
Final simplification11.5
herbie shell --seed 2022097
(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))))