Average Error: 42.1 → 24.8
Time: 27.6s
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;i \le -5.972711572932587 \cdot 10^{-05}:\\ \;\;\;\;\frac{\mathsf{fma}\left(100, e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, -100\right)}{i} \cdot n\\ \mathbf{elif}\;i \le 0.07870893021680746:\\ \;\;\;\;\frac{\mathsf{fma}\left(i, 100, \left(i \cdot i\right) \cdot \left(i \cdot \frac{50}{3} + 50\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{n}{i} \cdot \left(\left(\mathsf{fma}\left(50, \left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right), \mathsf{fma}\left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log i, \frac{50}{3}, \mathsf{fma}\left(100, n \cdot \log i, \mathsf{fma}\left(\left(n \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right) \cdot \log i, 50, \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot 50\right)\right)\right)\right) - \left(\mathsf{fma}\left(\left(\log i \cdot \left(n \cdot n\right)\right) \cdot \log n, 100, \frac{50}{3} \cdot \left(\left(\log n \cdot n\right) \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right)\right) + \frac{100}{3} \cdot \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log n\right)\right)\right) - \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \frac{50}{3} + 100 \cdot n\right) \cdot \log n\right)\\ \end{array}\]
100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}
\begin{array}{l}
\mathbf{if}\;i \le -5.972711572932587 \cdot 10^{-05}:\\
\;\;\;\;\frac{\mathsf{fma}\left(100, e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, -100\right)}{i} \cdot n\\

\mathbf{elif}\;i \le 0.07870893021680746:\\
\;\;\;\;\frac{\mathsf{fma}\left(i, 100, \left(i \cdot i\right) \cdot \left(i \cdot \frac{50}{3} + 50\right)\right)}{\frac{i}{n}}\\

\mathbf{else}:\\
\;\;\;\;\frac{n}{i} \cdot \left(\left(\mathsf{fma}\left(50, \left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right), \mathsf{fma}\left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log i, \frac{50}{3}, \mathsf{fma}\left(100, n \cdot \log i, \mathsf{fma}\left(\left(n \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right) \cdot \log i, 50, \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot 50\right)\right)\right)\right) - \left(\mathsf{fma}\left(\left(\log i \cdot \left(n \cdot n\right)\right) \cdot \log n, 100, \frac{50}{3} \cdot \left(\left(\log n \cdot n\right) \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right)\right) + \frac{100}{3} \cdot \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log n\right)\right)\right) - \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \frac{50}{3} + 100 \cdot n\right) \cdot \log n\right)\\

\end{array}
double f(double i, double n) {
        double r5323998 = 100.0;
        double r5323999 = 1.0;
        double r5324000 = i;
        double r5324001 = n;
        double r5324002 = r5324000 / r5324001;
        double r5324003 = r5323999 + r5324002;
        double r5324004 = pow(r5324003, r5324001);
        double r5324005 = r5324004 - r5323999;
        double r5324006 = r5324005 / r5324002;
        double r5324007 = r5323998 * r5324006;
        return r5324007;
}

double f(double i, double n) {
        double r5324008 = i;
        double r5324009 = -5.972711572932587e-05;
        bool r5324010 = r5324008 <= r5324009;
        double r5324011 = 100.0;
        double r5324012 = n;
        double r5324013 = r5324008 / r5324012;
        double r5324014 = log1p(r5324013);
        double r5324015 = r5324014 * r5324012;
        double r5324016 = exp(r5324015);
        double r5324017 = -100.0;
        double r5324018 = fma(r5324011, r5324016, r5324017);
        double r5324019 = r5324018 / r5324008;
        double r5324020 = r5324019 * r5324012;
        double r5324021 = 0.07870893021680746;
        bool r5324022 = r5324008 <= r5324021;
        double r5324023 = r5324008 * r5324008;
        double r5324024 = 16.666666666666668;
        double r5324025 = r5324008 * r5324024;
        double r5324026 = 50.0;
        double r5324027 = r5324025 + r5324026;
        double r5324028 = r5324023 * r5324027;
        double r5324029 = fma(r5324008, r5324011, r5324028);
        double r5324030 = r5324029 / r5324013;
        double r5324031 = r5324012 / r5324008;
        double r5324032 = log(r5324012);
        double r5324033 = r5324032 * r5324012;
        double r5324034 = r5324033 * r5324033;
        double r5324035 = log(r5324008);
        double r5324036 = r5324012 * r5324035;
        double r5324037 = r5324036 * r5324036;
        double r5324038 = r5324037 * r5324012;
        double r5324039 = r5324038 * r5324035;
        double r5324040 = r5324012 * r5324034;
        double r5324041 = r5324040 * r5324035;
        double r5324042 = r5324037 * r5324026;
        double r5324043 = fma(r5324041, r5324026, r5324042);
        double r5324044 = fma(r5324011, r5324036, r5324043);
        double r5324045 = fma(r5324039, r5324024, r5324044);
        double r5324046 = fma(r5324026, r5324034, r5324045);
        double r5324047 = r5324012 * r5324012;
        double r5324048 = r5324035 * r5324047;
        double r5324049 = r5324048 * r5324032;
        double r5324050 = r5324033 * r5324034;
        double r5324051 = r5324024 * r5324050;
        double r5324052 = fma(r5324049, r5324011, r5324051);
        double r5324053 = 33.333333333333336;
        double r5324054 = r5324038 * r5324032;
        double r5324055 = r5324053 * r5324054;
        double r5324056 = r5324052 + r5324055;
        double r5324057 = r5324046 - r5324056;
        double r5324058 = r5324038 * r5324024;
        double r5324059 = r5324011 * r5324012;
        double r5324060 = r5324058 + r5324059;
        double r5324061 = r5324060 * r5324032;
        double r5324062 = r5324057 - r5324061;
        double r5324063 = r5324031 * r5324062;
        double r5324064 = r5324022 ? r5324030 : r5324063;
        double r5324065 = r5324010 ? r5324020 : r5324064;
        return r5324065;
}

Error

Bits error versus i

Bits error versus n

Target

Original42.1
Target41.8
Herbie24.8
\[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 i < -5.972711572932587e-05

    1. Initial program 28.3

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Simplified28.2

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(100, {\left(1 + \frac{i}{n}\right)}^{n}, -100\right)}{\frac{i}{n}}}\]
    3. Using strategy rm
    4. Applied add-exp-log28.3

      \[\leadsto \frac{\mathsf{fma}\left(100, {\color{blue}{\left(e^{\log \left(1 + \frac{i}{n}\right)}\right)}}^{n}, -100\right)}{\frac{i}{n}}\]
    5. Applied pow-exp28.3

      \[\leadsto \frac{\mathsf{fma}\left(100, \color{blue}{e^{\log \left(1 + \frac{i}{n}\right) \cdot n}}, -100\right)}{\frac{i}{n}}\]
    6. Simplified5.4

      \[\leadsto \frac{\mathsf{fma}\left(100, e^{\color{blue}{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}}, -100\right)}{\frac{i}{n}}\]
    7. Using strategy rm
    8. Applied associate-/r/6.0

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(100, e^{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}, -100\right)}{i} \cdot n}\]

    if -5.972711572932587e-05 < i < 0.07870893021680746

    1. Initial program 49.9

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Simplified49.9

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(100, {\left(1 + \frac{i}{n}\right)}^{n}, -100\right)}{\frac{i}{n}}}\]
    3. Taylor expanded around 0 32.7

      \[\leadsto \frac{\color{blue}{100 \cdot i + \left(50 \cdot {i}^{2} + \frac{50}{3} \cdot {i}^{3}\right)}}{\frac{i}{n}}\]
    4. Simplified32.7

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(i, 100, \left(i \cdot i\right) \cdot \left(50 + \frac{50}{3} \cdot i\right)\right)}}{\frac{i}{n}}\]

    if 0.07870893021680746 < i

    1. Initial program 30.1

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Simplified30.1

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(100, {\left(1 + \frac{i}{n}\right)}^{n}, -100\right)}{\frac{i}{n}}}\]
    3. Using strategy rm
    4. Applied add-exp-log49.4

      \[\leadsto \frac{\mathsf{fma}\left(100, {\color{blue}{\left(e^{\log \left(1 + \frac{i}{n}\right)}\right)}}^{n}, -100\right)}{\frac{i}{n}}\]
    5. Applied pow-exp49.4

      \[\leadsto \frac{\mathsf{fma}\left(100, \color{blue}{e^{\log \left(1 + \frac{i}{n}\right) \cdot n}}, -100\right)}{\frac{i}{n}}\]
    6. Simplified48.6

      \[\leadsto \frac{\mathsf{fma}\left(100, e^{\color{blue}{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}}, -100\right)}{\frac{i}{n}}\]
    7. Using strategy rm
    8. Applied div-inv48.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(100, e^{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}, -100\right) \cdot \frac{1}{\frac{i}{n}}}\]
    9. Simplified48.6

      \[\leadsto \mathsf{fma}\left(100, e^{n \cdot \mathsf{log1p}\left(\frac{i}{n}\right)}, -100\right) \cdot \color{blue}{\frac{n}{i}}\]
    10. Taylor expanded around 0 21.2

      \[\leadsto \color{blue}{\left(\left(50 \cdot \left({n}^{2} \cdot {\left(\log n\right)}^{2}\right) + \left(\frac{50}{3} \cdot \left({n}^{3} \cdot {\left(\log i\right)}^{3}\right) + \left(100 \cdot \left(n \cdot \log i\right) + \left(\frac{100}{3} \cdot \left({n}^{3} \cdot \left({\left(\log n\right)}^{2} \cdot \log i\right)\right) + \left(\frac{50}{3} \cdot \left({n}^{3} \cdot \left(\log i \cdot {\left(\log n\right)}^{2}\right)\right) + 50 \cdot \left({n}^{2} \cdot {\left(\log i\right)}^{2}\right)\right)\right)\right)\right)\right) - \left(\frac{100}{3} \cdot \left({n}^{3} \cdot \left({\left(\log i\right)}^{2} \cdot \log n\right)\right) + \left(50 \cdot \left({n}^{2} \cdot \left(\log n \cdot \log i\right)\right) + \left(50 \cdot \left({n}^{2} \cdot \left(\log i \cdot \log n\right)\right) + \left(\frac{50}{3} \cdot \left({n}^{3} \cdot {\left(\log n\right)}^{3}\right) + \left(\frac{50}{3} \cdot \left({n}^{3} \cdot \left(\log n \cdot {\left(\log i\right)}^{2}\right)\right) + 100 \cdot \left(n \cdot \log n\right)\right)\right)\right)\right)\right)\right)} \cdot \frac{n}{i}\]
    11. Simplified21.2

      \[\leadsto \color{blue}{\left(\left(\mathsf{fma}\left(50, \left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right), \mathsf{fma}\left(\log i \cdot \left(n \cdot \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right)\right), \frac{50}{3}, \mathsf{fma}\left(100, n \cdot \log i, \mathsf{fma}\left(\log i \cdot \left(n \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right), 50, \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot 50\right)\right)\right)\right) - \left(\left(\left(n \cdot \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right)\right) \cdot \log n\right) \cdot \frac{100}{3} + \mathsf{fma}\left(\left(\left(n \cdot n\right) \cdot \log i\right) \cdot \log n, 100, \frac{50}{3} \cdot \left(\left(\log n \cdot n\right) \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right)\right)\right)\right) - \log n \cdot \left(n \cdot 100 + \frac{50}{3} \cdot \left(n \cdot \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right)\right)\right)\right)} \cdot \frac{n}{i}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification24.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;i \le -5.972711572932587 \cdot 10^{-05}:\\ \;\;\;\;\frac{\mathsf{fma}\left(100, e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, -100\right)}{i} \cdot n\\ \mathbf{elif}\;i \le 0.07870893021680746:\\ \;\;\;\;\frac{\mathsf{fma}\left(i, 100, \left(i \cdot i\right) \cdot \left(i \cdot \frac{50}{3} + 50\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{n}{i} \cdot \left(\left(\mathsf{fma}\left(50, \left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right), \mathsf{fma}\left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log i, \frac{50}{3}, \mathsf{fma}\left(100, n \cdot \log i, \mathsf{fma}\left(\left(n \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right) \cdot \log i, 50, \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot 50\right)\right)\right)\right) - \left(\mathsf{fma}\left(\left(\log i \cdot \left(n \cdot n\right)\right) \cdot \log n, 100, \frac{50}{3} \cdot \left(\left(\log n \cdot n\right) \cdot \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right)\right) + \frac{100}{3} \cdot \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \log n\right)\right)\right) - \left(\left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right) \cdot \frac{50}{3} + 100 \cdot n\right) \cdot \log n\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019162 +o rules:numerics
(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))))