Average Error: 42.7 → 13.3
Time: 28.9s
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;i \le -5.737712731949101 \cdot 10^{-05}:\\ \;\;\;\;\frac{1}{\frac{i}{\mathsf{fma}\left(e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, 100, -100\right) \cdot n}}\\ \mathbf{elif}\;i \le 0.0004866774544189746:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\frac{\sqrt[3]{i}}{n} \cdot \left(\sqrt[3]{i} \cdot \frac{\sqrt[3]{i}}{n}\right), \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{-100 + {\left(1 + \frac{i}{n}\right)}^{n} \cdot 100}{\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 -5.737712731949101 \cdot 10^{-05}:\\
\;\;\;\;\frac{1}{\frac{i}{\mathsf{fma}\left(e^{\mathsf{log1p}\left(\frac{i}{n}\right) \cdot n}, 100, -100\right) \cdot n}}\\

\mathbf{elif}\;i \le 0.0004866774544189746:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\frac{\sqrt[3]{i}}{n} \cdot \left(\sqrt[3]{i} \cdot \frac{\sqrt[3]{i}}{n}\right), \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}\\

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

\end{array}
double f(double i, double n) {
        double r4742476 = 100.0;
        double r4742477 = 1.0;
        double r4742478 = i;
        double r4742479 = n;
        double r4742480 = r4742478 / r4742479;
        double r4742481 = r4742477 + r4742480;
        double r4742482 = pow(r4742481, r4742479);
        double r4742483 = r4742482 - r4742477;
        double r4742484 = r4742483 / r4742480;
        double r4742485 = r4742476 * r4742484;
        return r4742485;
}

double f(double i, double n) {
        double r4742486 = i;
        double r4742487 = -5.737712731949101e-05;
        bool r4742488 = r4742486 <= r4742487;
        double r4742489 = 1.0;
        double r4742490 = n;
        double r4742491 = r4742486 / r4742490;
        double r4742492 = log1p(r4742491);
        double r4742493 = r4742492 * r4742490;
        double r4742494 = exp(r4742493);
        double r4742495 = 100.0;
        double r4742496 = -100.0;
        double r4742497 = fma(r4742494, r4742495, r4742496);
        double r4742498 = r4742497 * r4742490;
        double r4742499 = r4742486 / r4742498;
        double r4742500 = r4742489 / r4742499;
        double r4742501 = 0.0004866774544189746;
        bool r4742502 = r4742486 <= r4742501;
        double r4742503 = -0.005;
        double r4742504 = cbrt(r4742486);
        double r4742505 = r4742504 / r4742490;
        double r4742506 = r4742504 * r4742505;
        double r4742507 = r4742505 * r4742506;
        double r4742508 = 0.005;
        double r4742509 = 0.01;
        double r4742510 = r4742509 / r4742490;
        double r4742511 = fma(r4742507, r4742508, r4742510);
        double r4742512 = fma(r4742503, r4742491, r4742511);
        double r4742513 = r4742489 / r4742512;
        double r4742514 = r4742489 + r4742491;
        double r4742515 = pow(r4742514, r4742490);
        double r4742516 = r4742515 * r4742495;
        double r4742517 = r4742496 + r4742516;
        double r4742518 = r4742517 / r4742491;
        double r4742519 = r4742502 ? r4742513 : r4742518;
        double r4742520 = r4742488 ? r4742500 : r4742519;
        return r4742520;
}

Error

Bits error versus i

Bits error versus n

Target

Original42.7
Target42.2
Herbie13.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 3 regimes
  2. if i < -5.737712731949101e-05

    1. Initial program 29.1

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

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

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

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

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

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

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

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

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

    if -5.737712731949101e-05 < i < 0.0004866774544189746

    1. Initial program 50.1

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

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

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

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

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

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

      \[\leadsto \frac{1}{\color{blue}{\left(\frac{1}{200} \cdot \frac{i}{{n}^{2}} + \frac{1}{100} \cdot \frac{1}{n}\right) - \frac{1}{200} \cdot \frac{i}{n}}}\]
    10. Simplified13.2

      \[\leadsto \frac{1}{\color{blue}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\frac{i}{n \cdot n}, \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}}\]
    11. Using strategy rm
    12. Applied add-cube-cbrt13.2

      \[\leadsto \frac{1}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\frac{\color{blue}{\left(\sqrt[3]{i} \cdot \sqrt[3]{i}\right) \cdot \sqrt[3]{i}}}{n \cdot n}, \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}\]
    13. Applied times-frac11.9

      \[\leadsto \frac{1}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\color{blue}{\frac{\sqrt[3]{i} \cdot \sqrt[3]{i}}{n} \cdot \frac{\sqrt[3]{i}}{n}}, \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}\]
    14. Simplified11.9

      \[\leadsto \frac{1}{\mathsf{fma}\left(\frac{-1}{200}, \frac{i}{n}, \mathsf{fma}\left(\color{blue}{\left(\frac{\sqrt[3]{i}}{n} \cdot \sqrt[3]{i}\right)} \cdot \frac{\sqrt[3]{i}}{n}, \frac{1}{200}, \frac{\frac{1}{100}}{n}\right)\right)}\]

    if 0.0004866774544189746 < i

    1. Initial program 31.4

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

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

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

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

Reproduce

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