100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -1.21329936542595784:\\
\;\;\;\;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 -1.13133054522964566 \cdot 10^{-274}:\\
\;\;\;\;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 1.64797021054671768 \cdot 10^{-275}:\\
\;\;\;\;100 \cdot \left(\frac{{\left(1 + \frac{i}{n}\right)}^{\left(\frac{n}{2}\right)} + \sqrt{1}}{i} \cdot \left(\left({\left(1 + \frac{i}{n}\right)}^{\left(\frac{n}{2}\right)} - \sqrt{1}\right) \cdot n\right)\right)\\
\mathbf{elif}\;i \le 8.0570023823781865 \cdot 10^{-197}:\\
\;\;\;\;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 2.87388849271851564 \cdot 10^{-134}:\\
\;\;\;\;100 \cdot \left(\frac{{\left(1 + \frac{i}{n}\right)}^{\left(\frac{n}{2}\right)} + \sqrt{1}}{i} \cdot \left(\left(\left(0.5 \cdot i + \left(\frac{1}{2} \cdot \left(\log 1 \cdot n\right) + 1\right)\right) - \sqrt{1}\right) \cdot n\right)\right)\\
\mathbf{elif}\;i \le 7.1470850675780769 \cdot 10^{-9}:\\
\;\;\;\;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{else}:\\
\;\;\;\;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}}\\
\end{array}double f(double i, double n) {
double r146030 = 100.0;
double r146031 = 1.0;
double r146032 = i;
double r146033 = n;
double r146034 = r146032 / r146033;
double r146035 = r146031 + r146034;
double r146036 = pow(r146035, r146033);
double r146037 = r146036 - r146031;
double r146038 = r146037 / r146034;
double r146039 = r146030 * r146038;
return r146039;
}
double f(double i, double n) {
double r146040 = i;
double r146041 = -1.2132993654259578;
bool r146042 = r146040 <= r146041;
double r146043 = 100.0;
double r146044 = 1.0;
double r146045 = n;
double r146046 = r146040 / r146045;
double r146047 = r146044 + r146046;
double r146048 = 2.0;
double r146049 = r146048 * r146045;
double r146050 = pow(r146047, r146049);
double r146051 = r146044 * r146044;
double r146052 = -r146051;
double r146053 = r146050 + r146052;
double r146054 = pow(r146047, r146045);
double r146055 = r146054 + r146044;
double r146056 = r146053 / r146055;
double r146057 = r146056 / r146046;
double r146058 = r146043 * r146057;
double r146059 = -1.1313305452296457e-274;
bool r146060 = r146040 <= r146059;
double r146061 = r146044 * r146040;
double r146062 = 0.5;
double r146063 = pow(r146040, r146048);
double r146064 = r146062 * r146063;
double r146065 = log(r146044);
double r146066 = r146065 * r146045;
double r146067 = r146064 + r146066;
double r146068 = r146061 + r146067;
double r146069 = r146063 * r146065;
double r146070 = r146062 * r146069;
double r146071 = r146068 - r146070;
double r146072 = r146071 / r146046;
double r146073 = r146043 * r146072;
double r146074 = 1.6479702105467177e-275;
bool r146075 = r146040 <= r146074;
double r146076 = r146045 / r146048;
double r146077 = pow(r146047, r146076);
double r146078 = sqrt(r146044);
double r146079 = r146077 + r146078;
double r146080 = r146079 / r146040;
double r146081 = r146077 - r146078;
double r146082 = r146081 * r146045;
double r146083 = r146080 * r146082;
double r146084 = r146043 * r146083;
double r146085 = 8.057002382378186e-197;
bool r146086 = r146040 <= r146085;
double r146087 = 2.8738884927185156e-134;
bool r146088 = r146040 <= r146087;
double r146089 = r146062 * r146040;
double r146090 = 0.5;
double r146091 = r146090 * r146066;
double r146092 = 1.0;
double r146093 = r146091 + r146092;
double r146094 = r146089 + r146093;
double r146095 = r146094 - r146078;
double r146096 = r146095 * r146045;
double r146097 = r146080 * r146096;
double r146098 = r146043 * r146097;
double r146099 = 7.147085067578077e-09;
bool r146100 = r146040 <= r146099;
double r146101 = r146100 ? r146073 : r146058;
double r146102 = r146088 ? r146098 : r146101;
double r146103 = r146086 ? r146073 : r146102;
double r146104 = r146075 ? r146084 : r146103;
double r146105 = r146060 ? r146073 : r146104;
double r146106 = r146042 ? r146058 : r146105;
return r146106;
}




Bits error versus i




Bits error versus n
Results
| Original | 42.9 |
|---|---|
| Target | 42.8 |
| Herbie | 33.2 |
if i < -1.2132993654259578 or 7.147085067578077e-09 < i Initial program 29.7
rmApplied flip--29.7
Simplified29.7
if -1.2132993654259578 < i < -1.1313305452296457e-274 or 1.6479702105467177e-275 < i < 8.057002382378186e-197 or 2.8738884927185156e-134 < i < 7.147085067578077e-09Initial program 51.4
Taylor expanded around 0 31.5
if -1.1313305452296457e-274 < i < 1.6479702105467177e-275Initial program 47.2
rmApplied div-inv47.2
Applied add-sqr-sqrt47.2
Applied sqr-pow47.2
Applied difference-of-squares47.2
Applied times-frac46.7
Simplified46.7
if 8.057002382378186e-197 < i < 2.8738884927185156e-134Initial program 50.8
rmApplied div-inv50.8
Applied add-sqr-sqrt50.8
Applied sqr-pow50.8
Applied difference-of-squares50.8
Applied times-frac50.4
Simplified50.4
Taylor expanded around 0 50.4
Final simplification33.2
herbie shell --seed 2020018
(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))))