100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\begin{array}{l}
\mathbf{if}\;n \le -2.813114393619137495994961909777216500149 \cdot 10^{175}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\log 1, n, \mathsf{fma}\left(i \cdot i, 0.5 - 0.5 \cdot \log 1, i \cdot 1\right)\right) \cdot \left(100 \cdot n\right)}{i}\\
\mathbf{elif}\;n \le -1.421989441319127851613951560151701461699 \cdot 10^{58}:\\
\;\;\;\;\frac{100}{i} \cdot \frac{\frac{\left({\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right) \cdot {\left(\frac{i}{n} + 1\right)}^{n} - 1 \cdot \left(1 \cdot 1\right)}{\mathsf{fma}\left(1 + {\left(\frac{i}{n} + 1\right)}^{n}, 1, {\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right)}}{\frac{1}{n}}\\
\mathbf{elif}\;n \le -1.995072885870678103259479030384682118893:\\
\;\;\;\;\mathsf{fma}\left(\left(n \cdot n\right) \cdot \frac{\log 1}{i}, 100, \mathsf{fma}\left(50, i \cdot n, 100 \cdot n\right)\right) - \left(i \cdot n\right) \cdot \left(50 \cdot \log 1\right)\\
\mathbf{elif}\;n \le -4.586926552796907742204996293991418623461 \cdot 10^{-267}:\\
\;\;\;\;\frac{100}{i} \cdot \frac{\frac{\left({\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right) \cdot {\left(\frac{i}{n} + 1\right)}^{n} - 1 \cdot \left(1 \cdot 1\right)}{\mathsf{fma}\left(1 + {\left(\frac{i}{n} + 1\right)}^{n}, 1, {\left(\frac{i}{n} + 1\right)}^{n} \cdot {\left(\frac{i}{n} + 1\right)}^{n}\right)}}{\frac{1}{n}}\\
\mathbf{elif}\;n \le 8.765996428721520261943646244564954658781 \cdot 10^{-223}:\\
\;\;\;\;100 \cdot \frac{\mathsf{fma}\left(n, \log 1, \mathsf{fma}\left(1, i, 1\right)\right) - 1}{\frac{i}{n}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{100 \cdot \mathsf{fma}\left(n, \log 1, \mathsf{fma}\left(i \cdot i, 0.5 - 0.5 \cdot \log 1, i \cdot 1\right)\right)}{i}}{\frac{1}{n}}\\
\end{array}double f(double i, double n) {
double r7582780 = 100.0;
double r7582781 = 1.0;
double r7582782 = i;
double r7582783 = n;
double r7582784 = r7582782 / r7582783;
double r7582785 = r7582781 + r7582784;
double r7582786 = pow(r7582785, r7582783);
double r7582787 = r7582786 - r7582781;
double r7582788 = r7582787 / r7582784;
double r7582789 = r7582780 * r7582788;
return r7582789;
}
double f(double i, double n) {
double r7582790 = n;
double r7582791 = -2.8131143936191375e+175;
bool r7582792 = r7582790 <= r7582791;
double r7582793 = 1.0;
double r7582794 = log(r7582793);
double r7582795 = i;
double r7582796 = r7582795 * r7582795;
double r7582797 = 0.5;
double r7582798 = r7582797 * r7582794;
double r7582799 = r7582797 - r7582798;
double r7582800 = r7582795 * r7582793;
double r7582801 = fma(r7582796, r7582799, r7582800);
double r7582802 = fma(r7582794, r7582790, r7582801);
double r7582803 = 100.0;
double r7582804 = r7582803 * r7582790;
double r7582805 = r7582802 * r7582804;
double r7582806 = r7582805 / r7582795;
double r7582807 = -1.4219894413191279e+58;
bool r7582808 = r7582790 <= r7582807;
double r7582809 = r7582803 / r7582795;
double r7582810 = r7582795 / r7582790;
double r7582811 = r7582810 + r7582793;
double r7582812 = pow(r7582811, r7582790);
double r7582813 = r7582812 * r7582812;
double r7582814 = r7582813 * r7582812;
double r7582815 = r7582793 * r7582793;
double r7582816 = r7582793 * r7582815;
double r7582817 = r7582814 - r7582816;
double r7582818 = r7582793 + r7582812;
double r7582819 = fma(r7582818, r7582793, r7582813);
double r7582820 = r7582817 / r7582819;
double r7582821 = 1.0;
double r7582822 = r7582821 / r7582790;
double r7582823 = r7582820 / r7582822;
double r7582824 = r7582809 * r7582823;
double r7582825 = -1.995072885870678;
bool r7582826 = r7582790 <= r7582825;
double r7582827 = r7582790 * r7582790;
double r7582828 = r7582794 / r7582795;
double r7582829 = r7582827 * r7582828;
double r7582830 = 50.0;
double r7582831 = r7582795 * r7582790;
double r7582832 = fma(r7582830, r7582831, r7582804);
double r7582833 = fma(r7582829, r7582803, r7582832);
double r7582834 = r7582830 * r7582794;
double r7582835 = r7582831 * r7582834;
double r7582836 = r7582833 - r7582835;
double r7582837 = -4.586926552796908e-267;
bool r7582838 = r7582790 <= r7582837;
double r7582839 = 8.76599642872152e-223;
bool r7582840 = r7582790 <= r7582839;
double r7582841 = fma(r7582793, r7582795, r7582821);
double r7582842 = fma(r7582790, r7582794, r7582841);
double r7582843 = r7582842 - r7582793;
double r7582844 = r7582843 / r7582810;
double r7582845 = r7582803 * r7582844;
double r7582846 = fma(r7582790, r7582794, r7582801);
double r7582847 = r7582803 * r7582846;
double r7582848 = r7582847 / r7582795;
double r7582849 = r7582848 / r7582822;
double r7582850 = r7582840 ? r7582845 : r7582849;
double r7582851 = r7582838 ? r7582824 : r7582850;
double r7582852 = r7582826 ? r7582836 : r7582851;
double r7582853 = r7582808 ? r7582824 : r7582852;
double r7582854 = r7582792 ? r7582806 : r7582853;
return r7582854;
}




Bits error versus i




Bits error versus n
| Original | 42.9 |
|---|---|
| Target | 42.9 |
| Herbie | 23.7 |
if n < -2.8131143936191375e+175Initial program 53.6
rmApplied div-inv53.6
Applied *-un-lft-identity53.6
Applied times-frac53.1
Applied associate-*r*53.1
Simplified53.1
Taylor expanded around 0 25.5
Simplified25.5
rmApplied add-cube-cbrt26.1
Applied *-un-lft-identity26.1
Applied times-frac26.1
Applied associate-*l*25.9
Simplified25.9
rmApplied frac-times25.9
Simplified25.9
Simplified25.1
if -2.8131143936191375e+175 < n < -1.4219894413191279e+58 or -1.995072885870678 < n < -4.586926552796908e-267Initial program 25.6
rmApplied div-inv25.7
Applied *-un-lft-identity25.7
Applied times-frac25.9
Applied associate-*r*26.0
Simplified26.0
rmApplied flip3--26.0
Simplified26.0
Simplified26.0
if -1.4219894413191279e+58 < n < -1.995072885870678Initial program 35.7
rmApplied div-inv35.7
Applied *-un-lft-identity35.7
Applied times-frac35.7
Applied associate-*r*35.7
Simplified35.7
Taylor expanded around 0 28.8
Simplified28.8
Taylor expanded around 0 28.1
Simplified28.1
if -4.586926552796908e-267 < n < 8.76599642872152e-223Initial program 29.9
Taylor expanded around 0 14.8
Simplified14.8
if 8.76599642872152e-223 < n Initial program 57.6
rmApplied div-inv57.6
Applied *-un-lft-identity57.6
Applied times-frac57.3
Applied associate-*r*57.3
Simplified57.3
Taylor expanded around 0 27.7
Simplified27.7
rmApplied associate-*r/22.6
Simplified22.3
Final simplification23.7
herbie shell --seed 2019170 +o rules:numerics
(FPCore (i n)
:name "Compound Interest"
: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))))