Average Error: 42.3 → 20.7
Time: 35.3s
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;n \le -1.8239091289757303 \cdot 10^{+82}:\\ \;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\ \mathbf{elif}\;n \le -8.076739568312811 \cdot 10^{-20}:\\ \;\;\;\;\frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}} \cdot 100\\ \mathbf{elif}\;n \le 2.9484870312088923 \cdot 10^{-181}:\\ \;\;\;\;0\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\ \end{array}\]
100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}
\begin{array}{l}
\mathbf{if}\;n \le -1.8239091289757303 \cdot 10^{+82}:\\
\;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\

\mathbf{elif}\;n \le -8.076739568312811 \cdot 10^{-20}:\\
\;\;\;\;\frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}} \cdot 100\\

\mathbf{elif}\;n \le 2.9484870312088923 \cdot 10^{-181}:\\
\;\;\;\;0\\

\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\

\end{array}
double f(double i, double n) {
        double r5371829 = 100.0;
        double r5371830 = 1.0;
        double r5371831 = i;
        double r5371832 = n;
        double r5371833 = r5371831 / r5371832;
        double r5371834 = r5371830 + r5371833;
        double r5371835 = pow(r5371834, r5371832);
        double r5371836 = r5371835 - r5371830;
        double r5371837 = r5371836 / r5371833;
        double r5371838 = r5371829 * r5371837;
        return r5371838;
}

double f(double i, double n) {
        double r5371839 = n;
        double r5371840 = -1.8239091289757303e+82;
        bool r5371841 = r5371839 <= r5371840;
        double r5371842 = 0.5;
        double r5371843 = i;
        double r5371844 = 0.16666666666666666;
        double r5371845 = r5371843 * r5371844;
        double r5371846 = r5371842 + r5371845;
        double r5371847 = r5371846 * r5371843;
        double r5371848 = 1.0;
        double r5371849 = r5371847 + r5371848;
        double r5371850 = /* ERROR: no posit support in C */;
        double r5371851 = /* ERROR: no posit support in C */;
        double r5371852 = r5371851 * r5371839;
        double r5371853 = 100.0;
        double r5371854 = r5371852 * r5371853;
        double r5371855 = -8.076739568312811e-20;
        bool r5371856 = r5371839 <= r5371855;
        double r5371857 = r5371843 / r5371839;
        double r5371858 = r5371848 + r5371857;
        double r5371859 = pow(r5371858, r5371839);
        double r5371860 = r5371859 - r5371848;
        double r5371861 = exp(r5371860);
        double r5371862 = log(r5371861);
        double r5371863 = r5371862 / r5371857;
        double r5371864 = r5371863 * r5371853;
        double r5371865 = 2.9484870312088923e-181;
        bool r5371866 = r5371839 <= r5371865;
        double r5371867 = 0.0;
        double r5371868 = r5371866 ? r5371867 : r5371854;
        double r5371869 = r5371856 ? r5371864 : r5371868;
        double r5371870 = r5371841 ? r5371854 : r5371869;
        return r5371870;
}

Error

Bits error versus i

Bits error versus n

Target

Original42.3
Target42.0
Herbie20.7
\[100 \cdot \frac{e^{n \cdot \begin{array}{l} \mathbf{if}\;1 + \frac{i}{n} = 1:\\ \;\;\;\;\frac{i}{n}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{i}{n} \cdot \log \left(1 + \frac{i}{n}\right)}{\left(\frac{i}{n} + 1\right) - 1}\\ \end{array}} - 1}{\frac{i}{n}}\]

Derivation

  1. Split input into 3 regimes
  2. if n < -1.8239091289757303e+82 or 2.9484870312088923e-181 < n

    1. Initial program 54.4

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Taylor expanded around 0 38.0

      \[\leadsto 100 \cdot \frac{\color{blue}{i + \left(\frac{1}{2} \cdot {i}^{2} + \frac{1}{6} \cdot {i}^{3}\right)}}{\frac{i}{n}}\]
    3. Simplified38.0

      \[\leadsto 100 \cdot \frac{\color{blue}{\frac{1}{6} \cdot \left(i \cdot \left(i \cdot i\right)\right) + \left(i + \left(i \cdot i\right) \cdot \frac{1}{2}\right)}}{\frac{i}{n}}\]
    4. Using strategy rm
    5. Applied associate-/r/21.2

      \[\leadsto 100 \cdot \color{blue}{\left(\frac{\frac{1}{6} \cdot \left(i \cdot \left(i \cdot i\right)\right) + \left(i + \left(i \cdot i\right) \cdot \frac{1}{2}\right)}{i} \cdot n\right)}\]
    6. Using strategy rm
    7. Applied insert-posit1621.4

      \[\leadsto 100 \cdot \left(\color{blue}{\left(\left(\frac{\frac{1}{6} \cdot \left(i \cdot \left(i \cdot i\right)\right) + \left(i + \left(i \cdot i\right) \cdot \frac{1}{2}\right)}{i}\right)\right)} \cdot n\right)\]
    8. Simplified21.4

      \[\leadsto 100 \cdot \left(\color{blue}{\left(\left(\frac{i + \left(i \cdot i\right) \cdot \left(\frac{1}{2} + \frac{1}{6} \cdot i\right)}{i}\right)\right)} \cdot n\right)\]
    9. Taylor expanded around inf 21.3

      \[\leadsto 100 \cdot \left(\left(\color{blue}{\left(\frac{1}{2} \cdot i + \left(\frac{1}{6} \cdot {i}^{2} + 1\right)\right)}\right) \cdot n\right)\]
    10. Simplified21.3

      \[\leadsto 100 \cdot \left(\left(\color{blue}{\left(1 + \left(\frac{1}{2} + \frac{1}{6} \cdot i\right) \cdot i\right)}\right) \cdot n\right)\]

    if -1.8239091289757303e+82 < n < -8.076739568312811e-20

    1. Initial program 32.1

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Using strategy rm
    3. Applied add-log-exp32.1

      \[\leadsto 100 \cdot \frac{\color{blue}{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}}{\frac{i}{n}}\]

    if -8.076739568312811e-20 < n < 2.9484870312088923e-181

    1. Initial program 21.4

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Taylor expanded around 0 15.1

      \[\leadsto \color{blue}{0}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification20.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;n \le -1.8239091289757303 \cdot 10^{+82}:\\ \;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\ \mathbf{elif}\;n \le -8.076739568312811 \cdot 10^{-20}:\\ \;\;\;\;\frac{\log \left(e^{{\left(1 + \frac{i}{n}\right)}^{n} - 1}\right)}{\frac{i}{n}} \cdot 100\\ \mathbf{elif}\;n \le 2.9484870312088923 \cdot 10^{-181}:\\ \;\;\;\;0\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(\frac{1}{2} + i \cdot \frac{1}{6}\right) \cdot i + 1\right)\right) \cdot n\right) \cdot 100\\ \end{array}\]

Reproduce

herbie shell --seed 2019138 
(FPCore (i n)
  :name "Compound Interest"

  :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))))