100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;i \le -42606.74875587941642152145504951477050781:\\
\;\;\;\;\left(100 \cdot \left(n \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)\right)\right) \cdot \frac{1}{i}\\
\mathbf{elif}\;i \le 3.332988420430884258276291203877273900307 \cdot 10^{-27}:\\
\;\;\;\;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 9.944860624286458495633005962801713322847 \cdot 10^{141}:\\
\;\;\;\;\left(\left(\left(\frac{1}{6} \cdot \frac{{\left(\log i\right)}^{3}}{\frac{i}{100 \cdot {n}^{4}}} + \frac{1}{2} \cdot \left(\frac{100 \cdot \left({n}^{3} \cdot {\left(\log n\right)}^{2}\right)}{i} + \frac{{\left(\log i\right)}^{2}}{\frac{i}{100 \cdot {n}^{3}}}\right)\right) + \left(\frac{\left({n}^{2} \cdot 100\right) \cdot \log i}{i} + \frac{\frac{1}{2} \cdot \left(\left(100 \cdot \left({n}^{4} \cdot {\left(\log n\right)}^{2}\right)\right) \cdot \log i\right)}{i}\right)\right) - \left(\frac{1}{2} \cdot \frac{{\left(\log i\right)}^{2}}{\frac{i}{\left(100 \cdot {n}^{4}\right) \cdot \log n}} + \frac{\frac{1}{6} \cdot \left(\left({n}^{4} \cdot {\left(\log n\right)}^{3}\right) \cdot 100\right)}{i}\right)\right) - \left(\frac{\left(\left({n}^{3} \cdot \log n\right) \cdot 100\right) \cdot \log i}{i} + \frac{100 \cdot \left({n}^{2} \cdot \log n\right)}{i}\right)\\
\mathbf{elif}\;i \le 2.568245662391043108180991997152758915531 \cdot 10^{231}:\\
\;\;\;\;100 \cdot \left(\frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{i} \cdot n\right)\\
\mathbf{else}:\\
\;\;\;\;100 \cdot \frac{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right) - 1}{\frac{i}{n}}\\
\end{array}double f(double i, double n) {
double r94596 = 100.0;
double r94597 = 1.0;
double r94598 = i;
double r94599 = n;
double r94600 = r94598 / r94599;
double r94601 = r94597 + r94600;
double r94602 = pow(r94601, r94599);
double r94603 = r94602 - r94597;
double r94604 = r94603 / r94600;
double r94605 = r94596 * r94604;
return r94605;
}
double f(double i, double n) {
double r94606 = i;
double r94607 = -42606.74875587942;
bool r94608 = r94606 <= r94607;
double r94609 = 100.0;
double r94610 = n;
double r94611 = r94606 / r94610;
double r94612 = pow(r94611, r94610);
double r94613 = 1.0;
double r94614 = r94612 - r94613;
double r94615 = r94610 * r94614;
double r94616 = r94609 * r94615;
double r94617 = 1.0;
double r94618 = r94617 / r94606;
double r94619 = r94616 * r94618;
double r94620 = 3.332988420430884e-27;
bool r94621 = r94606 <= r94620;
double r94622 = r94613 * r94606;
double r94623 = 0.5;
double r94624 = 2.0;
double r94625 = pow(r94606, r94624);
double r94626 = r94623 * r94625;
double r94627 = log(r94613);
double r94628 = r94627 * r94610;
double r94629 = r94626 + r94628;
double r94630 = r94622 + r94629;
double r94631 = r94625 * r94627;
double r94632 = r94623 * r94631;
double r94633 = r94630 - r94632;
double r94634 = r94633 / r94611;
double r94635 = r94609 * r94634;
double r94636 = 9.944860624286458e+141;
bool r94637 = r94606 <= r94636;
double r94638 = 0.16666666666666666;
double r94639 = log(r94606);
double r94640 = 3.0;
double r94641 = pow(r94639, r94640);
double r94642 = 4.0;
double r94643 = pow(r94610, r94642);
double r94644 = r94609 * r94643;
double r94645 = r94606 / r94644;
double r94646 = r94641 / r94645;
double r94647 = r94638 * r94646;
double r94648 = 0.5;
double r94649 = pow(r94610, r94640);
double r94650 = log(r94610);
double r94651 = pow(r94650, r94624);
double r94652 = r94649 * r94651;
double r94653 = r94609 * r94652;
double r94654 = r94653 / r94606;
double r94655 = pow(r94639, r94624);
double r94656 = r94609 * r94649;
double r94657 = r94606 / r94656;
double r94658 = r94655 / r94657;
double r94659 = r94654 + r94658;
double r94660 = r94648 * r94659;
double r94661 = r94647 + r94660;
double r94662 = pow(r94610, r94624);
double r94663 = r94662 * r94609;
double r94664 = r94663 * r94639;
double r94665 = r94664 / r94606;
double r94666 = r94643 * r94651;
double r94667 = r94609 * r94666;
double r94668 = r94667 * r94639;
double r94669 = r94648 * r94668;
double r94670 = r94669 / r94606;
double r94671 = r94665 + r94670;
double r94672 = r94661 + r94671;
double r94673 = r94644 * r94650;
double r94674 = r94606 / r94673;
double r94675 = r94655 / r94674;
double r94676 = r94648 * r94675;
double r94677 = pow(r94650, r94640);
double r94678 = r94643 * r94677;
double r94679 = r94678 * r94609;
double r94680 = r94638 * r94679;
double r94681 = r94680 / r94606;
double r94682 = r94676 + r94681;
double r94683 = r94672 - r94682;
double r94684 = r94649 * r94650;
double r94685 = r94684 * r94609;
double r94686 = r94685 * r94639;
double r94687 = r94686 / r94606;
double r94688 = r94662 * r94650;
double r94689 = r94609 * r94688;
double r94690 = r94689 / r94606;
double r94691 = r94687 + r94690;
double r94692 = r94683 - r94691;
double r94693 = 2.568245662391043e+231;
bool r94694 = r94606 <= r94693;
double r94695 = r94613 + r94611;
double r94696 = pow(r94695, r94610);
double r94697 = r94696 - r94613;
double r94698 = r94697 / r94606;
double r94699 = r94698 * r94610;
double r94700 = r94609 * r94699;
double r94701 = r94628 + r94617;
double r94702 = r94622 + r94701;
double r94703 = r94702 - r94613;
double r94704 = r94703 / r94611;
double r94705 = r94609 * r94704;
double r94706 = r94694 ? r94700 : r94705;
double r94707 = r94637 ? r94692 : r94706;
double r94708 = r94621 ? r94635 : r94707;
double r94709 = r94608 ? r94619 : r94708;
return r94709;
}




Bits error versus i




Bits error versus n
Results
| Original | 43.1 |
|---|---|
| Target | 42.8 |
| Herbie | 30.1 |
if i < -42606.74875587942Initial program 27.8
Taylor expanded around inf 64.0
Simplified18.8
rmApplied div-inv18.8
Applied associate-*r*19.0
if -42606.74875587942 < i < 3.332988420430884e-27Initial program 50.7
Taylor expanded around 0 34.2
if 3.332988420430884e-27 < i < 9.944860624286458e+141Initial program 38.7
Taylor expanded around inf 37.2
Simplified39.2
rmApplied add-sqr-sqrt39.2
Applied associate-*l*39.2
Taylor expanded around 0 23.2
Simplified23.2
if 9.944860624286458e+141 < i < 2.568245662391043e+231Initial program 32.0
rmApplied associate-/r/32.0
if 2.568245662391043e+231 < i Initial program 29.1
Taylor expanded around 0 36.1
Final simplification30.1
herbie shell --seed 2019325
(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))))