Average Error: 42.5 → 26.7
Time: 30.4s
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;i \le -1.6350012191006144 \cdot 10^{-11}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}{i}}{\frac{1}{n}}\\ \mathbf{elif}\;i \le 5.39212722965903 \cdot 10^{-258}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 9.24682495818279 \cdot 10^{-232}:\\ \;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 0.22389212326838298:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\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 -1.6350012191006144 \cdot 10^{-11}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}{i}}{\frac{1}{n}}\\

\mathbf{elif}\;i \le 5.39212722965903 \cdot 10^{-258}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\

\mathbf{elif}\;i \le 9.24682495818279 \cdot 10^{-232}:\\
\;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\

\end{array}
double f(double i, double n) {
        double r4112367 = 100.0;
        double r4112368 = 1.0;
        double r4112369 = i;
        double r4112370 = n;
        double r4112371 = r4112369 / r4112370;
        double r4112372 = r4112368 + r4112371;
        double r4112373 = pow(r4112372, r4112370);
        double r4112374 = r4112373 - r4112368;
        double r4112375 = r4112374 / r4112371;
        double r4112376 = r4112367 * r4112375;
        return r4112376;
}

double f(double i, double n) {
        double r4112377 = i;
        double r4112378 = -1.6350012191006144e-11;
        bool r4112379 = r4112377 <= r4112378;
        double r4112380 = 100.0;
        double r4112381 = n;
        double r4112382 = r4112377 / r4112381;
        double r4112383 = log1p(r4112382);
        double r4112384 = r4112383 * r4112381;
        double r4112385 = exp(r4112384);
        double r4112386 = -100.0;
        double r4112387 = fma(r4112380, r4112385, r4112386);
        double r4112388 = r4112387 / r4112377;
        double r4112389 = 1.0;
        double r4112390 = r4112389 / r4112381;
        double r4112391 = r4112388 / r4112390;
        double r4112392 = 5.39212722965903e-258;
        bool r4112393 = r4112377 <= r4112392;
        double r4112394 = r4112377 * r4112377;
        double r4112395 = 50.0;
        double r4112396 = 16.666666666666668;
        double r4112397 = r4112394 * r4112396;
        double r4112398 = r4112397 + r4112380;
        double r4112399 = r4112398 * r4112377;
        double r4112400 = fma(r4112394, r4112395, r4112399);
        double r4112401 = r4112400 / r4112382;
        double r4112402 = 9.24682495818279e-232;
        bool r4112403 = r4112377 <= r4112402;
        double r4112404 = r4112382 + r4112389;
        double r4112405 = pow(r4112404, r4112381);
        double r4112406 = fma(r4112380, r4112405, r4112386);
        double r4112407 = exp(r4112406);
        double r4112408 = log(r4112407);
        double r4112409 = r4112408 / r4112382;
        double r4112410 = 0.22389212326838298;
        bool r4112411 = r4112377 <= r4112410;
        double r4112412 = r4112411 ? r4112401 : r4112409;
        double r4112413 = r4112403 ? r4112409 : r4112412;
        double r4112414 = r4112393 ? r4112401 : r4112413;
        double r4112415 = r4112379 ? r4112391 : r4112414;
        return r4112415;
}

Error

Bits error versus i

Bits error versus n

Target

Original42.5
Target41.8
Herbie26.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 i < -1.6350012191006144e-11

    1. Initial program 29.1

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

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

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

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

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

      \[\leadsto \frac{\mathsf{fma}\left(100, \left(e^{n \cdot \mathsf{log1p}\left(\left(\frac{i}{n}\right)\right)}\right), -100\right)}{\color{blue}{i \cdot \frac{1}{n}}}\]
    9. Applied associate-/r*6.5

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

    if -1.6350012191006144e-11 < i < 5.39212722965903e-258 or 9.24682495818279e-232 < i < 0.22389212326838298

    1. Initial program 50.3

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

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

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

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

    if 5.39212722965903e-258 < i < 9.24682495818279e-232 or 0.22389212326838298 < i

    1. Initial program 34.1

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

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

      \[\leadsto \frac{\color{blue}{\log \left(e^{\mathsf{fma}\left(100, \left({\left(1 + \frac{i}{n}\right)}^{n}\right), -100\right)}\right)}}{\frac{i}{n}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification26.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;i \le -1.6350012191006144 \cdot 10^{-11}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}{i}}{\frac{1}{n}}\\ \mathbf{elif}\;i \le 5.39212722965903 \cdot 10^{-258}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 9.24682495818279 \cdot 10^{-232}:\\ \;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\ \mathbf{elif}\;i \le 0.22389212326838298:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(i \cdot i\right), 50, \left(\left(\left(i \cdot i\right) \cdot \frac{50}{3} + 100\right) \cdot i\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\log \left(e^{\mathsf{fma}\left(100, \left({\left(\frac{i}{n} + 1\right)}^{n}\right), -100\right)}\right)}{\frac{i}{n}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019129 +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))))