Average Error: 42.1 → 24.8
Time: 27.5s
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 r5202410 = 100.0;
        double r5202411 = 1.0;
        double r5202412 = i;
        double r5202413 = n;
        double r5202414 = r5202412 / r5202413;
        double r5202415 = r5202411 + r5202414;
        double r5202416 = pow(r5202415, r5202413);
        double r5202417 = r5202416 - r5202411;
        double r5202418 = r5202417 / r5202414;
        double r5202419 = r5202410 * r5202418;
        return r5202419;
}

double f(double i, double n) {
        double r5202420 = i;
        double r5202421 = -5.972711572932587e-05;
        bool r5202422 = r5202420 <= r5202421;
        double r5202423 = 100.0;
        double r5202424 = n;
        double r5202425 = r5202420 / r5202424;
        double r5202426 = log1p(r5202425);
        double r5202427 = r5202426 * r5202424;
        double r5202428 = exp(r5202427);
        double r5202429 = -100.0;
        double r5202430 = fma(r5202423, r5202428, r5202429);
        double r5202431 = r5202430 / r5202420;
        double r5202432 = r5202431 * r5202424;
        double r5202433 = 0.07870893021680746;
        bool r5202434 = r5202420 <= r5202433;
        double r5202435 = r5202420 * r5202420;
        double r5202436 = 16.666666666666668;
        double r5202437 = r5202420 * r5202436;
        double r5202438 = 50.0;
        double r5202439 = r5202437 + r5202438;
        double r5202440 = r5202435 * r5202439;
        double r5202441 = fma(r5202420, r5202423, r5202440);
        double r5202442 = r5202441 / r5202425;
        double r5202443 = r5202424 / r5202420;
        double r5202444 = log(r5202424);
        double r5202445 = r5202444 * r5202424;
        double r5202446 = r5202445 * r5202445;
        double r5202447 = log(r5202420);
        double r5202448 = r5202424 * r5202447;
        double r5202449 = r5202448 * r5202448;
        double r5202450 = r5202449 * r5202424;
        double r5202451 = r5202450 * r5202447;
        double r5202452 = r5202424 * r5202446;
        double r5202453 = r5202452 * r5202447;
        double r5202454 = r5202449 * r5202438;
        double r5202455 = fma(r5202453, r5202438, r5202454);
        double r5202456 = fma(r5202423, r5202448, r5202455);
        double r5202457 = fma(r5202451, r5202436, r5202456);
        double r5202458 = fma(r5202438, r5202446, r5202457);
        double r5202459 = r5202424 * r5202424;
        double r5202460 = r5202447 * r5202459;
        double r5202461 = r5202460 * r5202444;
        double r5202462 = r5202445 * r5202446;
        double r5202463 = r5202436 * r5202462;
        double r5202464 = fma(r5202461, r5202423, r5202463);
        double r5202465 = 33.333333333333336;
        double r5202466 = r5202450 * r5202444;
        double r5202467 = r5202465 * r5202466;
        double r5202468 = r5202464 + r5202467;
        double r5202469 = r5202458 - r5202468;
        double r5202470 = r5202450 * r5202436;
        double r5202471 = r5202423 * r5202424;
        double r5202472 = r5202470 + r5202471;
        double r5202473 = r5202472 * r5202444;
        double r5202474 = r5202469 - r5202473;
        double r5202475 = r5202443 * r5202474;
        double r5202476 = r5202434 ? r5202442 : r5202475;
        double r5202477 = r5202422 ? r5202432 : r5202476;
        return r5202477;
}

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