100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -6.8977356701701615 \cdot 10^{-9}:\\
\;\;\;\;\left(\left({\left(1 + \frac{i}{n}\right)}^{\left(\frac{n}{2}\right)} + \sqrt{1}\right) \cdot 100\right) \cdot \left(\frac{{\left(\frac{i}{n}\right)}^{\left(\frac{n}{2}\right)}}{\frac{i}{n}} - \frac{\sqrt{1}}{\frac{i}{n}}\right)\\
\mathbf{elif}\;i \le 2.5875098730826361 \cdot 10^{-28}:\\
\;\;\;\;100 \cdot \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)}{\frac{i}{n}}\\
\mathbf{elif}\;i \le 4.20451188706486744 \cdot 10^{212}:\\
\;\;\;\;100 \cdot \frac{\frac{1}{2} \cdot \left({n}^{3} \cdot {\left(\log n\right)}^{2}\right) + \left(\left(\left(\frac{1}{6} \cdot \left({\left(\log i\right)}^{3} \cdot {n}^{4}\right) + \log i \cdot {n}^{2}\right) + \frac{1}{2} \cdot \left(\log i \cdot \left({n}^{4} \cdot {\left(\log n\right)}^{2}\right) + {\left(\log i\right)}^{2} \cdot {n}^{3}\right)\right) - \left(\frac{1}{2} \cdot \left({\left(\log i\right)}^{2} \cdot \left({n}^{4} \cdot \log n\right)\right) + \left({n}^{2} \cdot \log n + \left(\frac{1}{6} \cdot \left({n}^{4} \cdot {\left(\log n\right)}^{3}\right) + \log i \cdot \left({n}^{3} \cdot \log n\right)\right)\right)\right)\right)}{i}\\
\mathbf{else}:\\
\;\;\;\;\left(\left({\left(1 + \frac{i}{n}\right)}^{\left(\frac{n}{2}\right)} + \sqrt{1}\right) \cdot 100\right) \cdot \left(\frac{{\left(\frac{i}{n}\right)}^{\left(\frac{n}{2}\right)}}{\frac{i}{n}} - \frac{\sqrt{1}}{\frac{i}{n}}\right)\\
\end{array}double f(double i, double n) {
double r136094 = 100.0;
double r136095 = 1.0;
double r136096 = i;
double r136097 = n;
double r136098 = r136096 / r136097;
double r136099 = r136095 + r136098;
double r136100 = pow(r136099, r136097);
double r136101 = r136100 - r136095;
double r136102 = r136101 / r136098;
double r136103 = r136094 * r136102;
return r136103;
}
double f(double i, double n) {
double r136104 = i;
double r136105 = -6.8977356701701615e-09;
bool r136106 = r136104 <= r136105;
double r136107 = 1.0;
double r136108 = n;
double r136109 = r136104 / r136108;
double r136110 = r136107 + r136109;
double r136111 = 2.0;
double r136112 = r136108 / r136111;
double r136113 = pow(r136110, r136112);
double r136114 = sqrt(r136107);
double r136115 = r136113 + r136114;
double r136116 = 100.0;
double r136117 = r136115 * r136116;
double r136118 = pow(r136109, r136112);
double r136119 = r136118 / r136109;
double r136120 = r136114 / r136109;
double r136121 = r136119 - r136120;
double r136122 = r136117 * r136121;
double r136123 = 2.587509873082636e-28;
bool r136124 = r136104 <= r136123;
double r136125 = r136107 * r136104;
double r136126 = 0.5;
double r136127 = pow(r136104, r136111);
double r136128 = r136126 * r136127;
double r136129 = log(r136107);
double r136130 = r136129 * r136108;
double r136131 = r136128 + r136130;
double r136132 = r136125 + r136131;
double r136133 = r136127 * r136129;
double r136134 = r136126 * r136133;
double r136135 = r136132 - r136134;
double r136136 = r136135 / r136109;
double r136137 = r136116 * r136136;
double r136138 = 4.2045118870648674e+212;
bool r136139 = r136104 <= r136138;
double r136140 = 0.5;
double r136141 = 3.0;
double r136142 = pow(r136108, r136141);
double r136143 = log(r136108);
double r136144 = pow(r136143, r136111);
double r136145 = r136142 * r136144;
double r136146 = r136140 * r136145;
double r136147 = 0.16666666666666666;
double r136148 = log(r136104);
double r136149 = pow(r136148, r136141);
double r136150 = 4.0;
double r136151 = pow(r136108, r136150);
double r136152 = r136149 * r136151;
double r136153 = r136147 * r136152;
double r136154 = pow(r136108, r136111);
double r136155 = r136148 * r136154;
double r136156 = r136153 + r136155;
double r136157 = r136151 * r136144;
double r136158 = r136148 * r136157;
double r136159 = pow(r136148, r136111);
double r136160 = r136159 * r136142;
double r136161 = r136158 + r136160;
double r136162 = r136140 * r136161;
double r136163 = r136156 + r136162;
double r136164 = r136151 * r136143;
double r136165 = r136159 * r136164;
double r136166 = r136140 * r136165;
double r136167 = r136154 * r136143;
double r136168 = pow(r136143, r136141);
double r136169 = r136151 * r136168;
double r136170 = r136147 * r136169;
double r136171 = r136142 * r136143;
double r136172 = r136148 * r136171;
double r136173 = r136170 + r136172;
double r136174 = r136167 + r136173;
double r136175 = r136166 + r136174;
double r136176 = r136163 - r136175;
double r136177 = r136146 + r136176;
double r136178 = r136177 / r136104;
double r136179 = r136116 * r136178;
double r136180 = r136139 ? r136179 : r136122;
double r136181 = r136124 ? r136137 : r136180;
double r136182 = r136106 ? r136122 : r136181;
return r136182;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.2 |
|---|---|
| Target | 42.9 |
| Herbie | 31.8 |
if i < -6.8977356701701615e-09 or 4.2045118870648674e+212 < i Initial program 29.7
rmApplied *-un-lft-identity29.7
Applied *-un-lft-identity29.7
Applied times-frac29.7
Applied add-sqr-sqrt29.7
Applied sqr-pow29.7
Applied difference-of-squares29.7
Applied times-frac29.7
Applied associate-*r*29.7
Simplified29.7
Taylor expanded around inf 63.5
Simplified29.6
if -6.8977356701701615e-09 < i < 2.587509873082636e-28Initial program 51.1
Taylor expanded around 0 34.2
if 2.587509873082636e-28 < i < 4.2045118870648674e+212Initial program 36.1
rmApplied div-inv36.1
Applied add-sqr-sqrt36.1
Applied sqr-pow36.2
Applied difference-of-squares36.2
Applied times-frac36.2
Simplified36.1
rmApplied associate-*l/36.2
Simplified36.0
Taylor expanded around 0 24.3
Simplified24.3
Final simplification31.8
herbie shell --seed 2020060
(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))))