Average Error: 43.2 → 19.3
Time: 32.9s
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;i \le -0.1198183818045873705315784718550276011229:\\ \;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 5.738844998942817632325841259444132447243:\\ \;\;\;\;\left(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)}{i}\right) \cdot n\\ \mathbf{elif}\;i \le 3.877114676469803572790117232248422698017 \cdot 10^{110}:\\ \;\;\;\;100 \cdot \frac{n \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{i}\\ \mathbf{else}:\\ \;\;\;\;100 \cdot \frac{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right) - 1}{\frac{i}{n}}\\ \end{array}\]
100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}
\begin{array}{l}
\mathbf{if}\;i \le -0.1198183818045873705315784718550276011229:\\
\;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\

\mathbf{elif}\;i \le 5.738844998942817632325841259444132447243:\\
\;\;\;\;\left(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)}{i}\right) \cdot n\\

\mathbf{elif}\;i \le 3.877114676469803572790117232248422698017 \cdot 10^{110}:\\
\;\;\;\;100 \cdot \frac{n \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{i}\\

\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 r100817 = 100.0;
        double r100818 = 1.0;
        double r100819 = i;
        double r100820 = n;
        double r100821 = r100819 / r100820;
        double r100822 = r100818 + r100821;
        double r100823 = pow(r100822, r100820);
        double r100824 = r100823 - r100818;
        double r100825 = r100824 / r100821;
        double r100826 = r100817 * r100825;
        return r100826;
}

double f(double i, double n) {
        double r100827 = i;
        double r100828 = -0.11981838180458737;
        bool r100829 = r100827 <= r100828;
        double r100830 = 100.0;
        double r100831 = n;
        double r100832 = r100827 / r100831;
        double r100833 = pow(r100832, r100831);
        double r100834 = 1.0;
        double r100835 = r100833 - r100834;
        double r100836 = r100835 / r100832;
        double r100837 = r100830 * r100836;
        double r100838 = 5.738844998942818;
        bool r100839 = r100827 <= r100838;
        double r100840 = r100834 * r100827;
        double r100841 = 0.5;
        double r100842 = 2.0;
        double r100843 = pow(r100827, r100842);
        double r100844 = r100841 * r100843;
        double r100845 = log(r100834);
        double r100846 = r100845 * r100831;
        double r100847 = r100844 + r100846;
        double r100848 = r100840 + r100847;
        double r100849 = r100843 * r100845;
        double r100850 = r100841 * r100849;
        double r100851 = r100848 - r100850;
        double r100852 = r100851 / r100827;
        double r100853 = r100830 * r100852;
        double r100854 = r100853 * r100831;
        double r100855 = 3.8771146764698036e+110;
        bool r100856 = r100827 <= r100855;
        double r100857 = r100831 * r100835;
        double r100858 = r100857 / r100827;
        double r100859 = r100830 * r100858;
        double r100860 = 1.0;
        double r100861 = r100846 + r100860;
        double r100862 = r100840 + r100861;
        double r100863 = r100862 - r100834;
        double r100864 = r100863 / r100832;
        double r100865 = r100830 * r100864;
        double r100866 = r100856 ? r100859 : r100865;
        double r100867 = r100839 ? r100854 : r100866;
        double r100868 = r100829 ? r100837 : r100867;
        return r100868;
}

Error

Bits error versus i

Bits error versus n

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original43.2
Target42.7
Herbie19.3
\[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 4 regimes
  2. if i < -0.11981838180458737

    1. Initial program 27.8

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

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

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

    if -0.11981838180458737 < i < 5.738844998942818

    1. Initial program 50.9

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

      \[\leadsto 100 \cdot \frac{\color{blue}{\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}}\]
    3. Using strategy rm
    4. Applied associate-/r/16.6

      \[\leadsto 100 \cdot \color{blue}{\left(\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)}{i} \cdot n\right)}\]
    5. Applied associate-*r*16.6

      \[\leadsto \color{blue}{\left(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)}{i}\right) \cdot n}\]

    if 5.738844998942818 < i < 3.8771146764698036e+110

    1. Initial program 33.3

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

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

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

    if 3.8771146764698036e+110 < i

    1. Initial program 34.7

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

      \[\leadsto 100 \cdot \frac{\color{blue}{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right)} - 1}{\frac{i}{n}}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification19.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;i \le -0.1198183818045873705315784718550276011229:\\ \;\;\;\;100 \cdot \frac{{\left(\frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 5.738844998942817632325841259444132447243:\\ \;\;\;\;\left(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)}{i}\right) \cdot n\\ \mathbf{elif}\;i \le 3.877114676469803572790117232248422698017 \cdot 10^{110}:\\ \;\;\;\;100 \cdot \frac{n \cdot \left({\left(\frac{i}{n}\right)}^{n} - 1\right)}{i}\\ \mathbf{else}:\\ \;\;\;\;100 \cdot \frac{\left(1 \cdot i + \left(\log 1 \cdot n + 1\right)\right) - 1}{\frac{i}{n}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 
(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))))