100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -0.5511580558700998055954300980374682694674:\\
\;\;\;\;100 \cdot \frac{\frac{{\left(1 + \frac{i}{n}\right)}^{\left(2 \cdot n\right)} + \left(-1 \cdot 1\right)}{{\left(1 + \frac{i}{n}\right)}^{n} + 1}}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 6.118499728754747261555536370589189972005 \cdot 10^{-197}:\\
\;\;\;\;100 \cdot \left(\left(\sqrt{\frac{\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{i}} \cdot \sqrt{\frac{\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)}{i}}\right) \cdot n\right)\\
\mathbf{elif}\;i \le 8648182.72403052262961864471435546875:\\
\;\;\;\;\frac{100 \cdot \left(\left(\left(1 \cdot i + \left(0.5 \cdot {i}^{2} + \log 1 \cdot n\right)\right) - 0.5 \cdot \left({i}^{2} \cdot \log 1\right)\right) \cdot n\right)}{i}\\
\mathbf{else}:\\
\;\;\;\;\frac{100}{i} \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r129139 = 100.0;
double r129140 = 1.0;
double r129141 = i;
double r129142 = n;
double r129143 = r129141 / r129142;
double r129144 = r129140 + r129143;
double r129145 = pow(r129144, r129142);
double r129146 = r129145 - r129140;
double r129147 = r129146 / r129143;
double r129148 = r129139 * r129147;
return r129148;
}
double f(double i, double n) {
double r129149 = i;
double r129150 = -0.5511580558700998;
bool r129151 = r129149 <= r129150;
double r129152 = 100.0;
double r129153 = 1.0;
double r129154 = n;
double r129155 = r129149 / r129154;
double r129156 = r129153 + r129155;
double r129157 = 2.0;
double r129158 = r129157 * r129154;
double r129159 = pow(r129156, r129158);
double r129160 = r129153 * r129153;
double r129161 = -r129160;
double r129162 = r129159 + r129161;
double r129163 = pow(r129156, r129154);
double r129164 = r129163 + r129153;
double r129165 = r129162 / r129164;
double r129166 = r129165 / r129155;
double r129167 = r129152 * r129166;
double r129168 = 6.118499728754747e-197;
bool r129169 = r129149 <= r129168;
double r129170 = r129153 * r129149;
double r129171 = 0.5;
double r129172 = pow(r129149, r129157);
double r129173 = r129171 * r129172;
double r129174 = log(r129153);
double r129175 = r129174 * r129154;
double r129176 = r129173 + r129175;
double r129177 = r129170 + r129176;
double r129178 = r129172 * r129174;
double r129179 = r129171 * r129178;
double r129180 = r129177 - r129179;
double r129181 = r129180 / r129149;
double r129182 = sqrt(r129181);
double r129183 = r129182 * r129182;
double r129184 = r129183 * r129154;
double r129185 = r129152 * r129184;
double r129186 = 8648182.724030523;
bool r129187 = r129149 <= r129186;
double r129188 = r129180 * r129154;
double r129189 = r129152 * r129188;
double r129190 = r129189 / r129149;
double r129191 = r129152 / r129149;
double r129192 = r129163 - r129153;
double r129193 = 1.0;
double r129194 = r129193 / r129154;
double r129195 = r129192 / r129194;
double r129196 = r129191 * r129195;
double r129197 = r129187 ? r129190 : r129196;
double r129198 = r129169 ? r129185 : r129197;
double r129199 = r129151 ? r129167 : r129198;
return r129199;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.9 |
|---|---|
| Target | 43.1 |
| Herbie | 20.5 |
if i < -0.5511580558700998Initial program 26.8
rmApplied flip--26.8
Simplified26.8
if -0.5511580558700998 < i < 6.118499728754747e-197Initial program 50.7
Taylor expanded around 0 35.9
rmApplied associate-/r/16.3
rmApplied add-sqr-sqrt16.3
if 6.118499728754747e-197 < i < 8648182.724030523Initial program 51.0
Taylor expanded around 0 29.9
rmApplied associate-/r/19.0
rmApplied associate-*l/16.1
Applied associate-*r/16.2
if 8648182.724030523 < i Initial program 31.1
rmApplied div-inv31.1
Applied *-un-lft-identity31.1
Applied times-frac31.1
Applied associate-*r*31.1
Simplified31.0
Final simplification20.5
herbie shell --seed 2019362
(FPCore (i n)
:name "Compound Interest"
:precision binary64
: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))))