Average Error: 42.6 → 12.1
Time: 1.7m
Precision: 64
\[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
\[\begin{array}{l} \mathbf{if}\;i \le -9.441810589112862 \cdot 10^{-06}:\\ \;\;\;\;\frac{1}{\frac{\frac{i}{n}}{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}}\\ \mathbf{elif}\;i \le 0.004614392422049968:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\left(\frac{i}{n}\right), \left(\frac{\frac{1}{200}}{n} - \frac{1}{200}\right), \left(\frac{1}{\frac{n}{\frac{1}{100}}}\right)\right)}\\ \mathbf{elif}\;i \le 3.108127690004362 \cdot 10^{+258}:\\ \;\;\;\;\frac{\mathsf{fma}\left(50, \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right), \left(\mathsf{fma}\left(\frac{50}{3}, \left(\log i \cdot \left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right)\right), \left(\mathsf{fma}\left(100, \left(n \cdot \log i\right), \left(\left(\log i \cdot \left(\left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right) \cdot n\right)\right) \cdot 50 + 50 \cdot \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right)\right)\right)\right)\right)\right)\right) - \left(\left(\left(\log n \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot 50\right) + \mathsf{fma}\left(\left(\left(\log i \cdot \log i\right) \cdot \left(\left(n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right), \frac{100}{3}, \left(\left(\log n \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot 50\right)\right)\right)\right) + \mathsf{fma}\left(\frac{50}{3}, \left(\log n \cdot \left(\left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right) \cdot n\right)\right), \left(\mathsf{fma}\left(\left(\left(\log i \cdot \log i\right) \cdot \left(\left(n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right), \frac{50}{3}, \left(\left(\log n \cdot n\right) \cdot 100\right)\right)\right)\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-100 + 100 \cdot {\left(1 + \frac{i}{n}\right)}^{n}}{\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 -9.441810589112862 \cdot 10^{-06}:\\
\;\;\;\;\frac{1}{\frac{\frac{i}{n}}{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}}\\

\mathbf{elif}\;i \le 0.004614392422049968:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\left(\frac{i}{n}\right), \left(\frac{\frac{1}{200}}{n} - \frac{1}{200}\right), \left(\frac{1}{\frac{n}{\frac{1}{100}}}\right)\right)}\\

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

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

\end{array}
double f(double i, double n) {
        double r25561271 = 100.0;
        double r25561272 = 1.0;
        double r25561273 = i;
        double r25561274 = n;
        double r25561275 = r25561273 / r25561274;
        double r25561276 = r25561272 + r25561275;
        double r25561277 = pow(r25561276, r25561274);
        double r25561278 = r25561277 - r25561272;
        double r25561279 = r25561278 / r25561275;
        double r25561280 = r25561271 * r25561279;
        return r25561280;
}

double f(double i, double n) {
        double r25561281 = i;
        double r25561282 = -9.441810589112862e-06;
        bool r25561283 = r25561281 <= r25561282;
        double r25561284 = 1.0;
        double r25561285 = n;
        double r25561286 = r25561281 / r25561285;
        double r25561287 = 100.0;
        double r25561288 = log1p(r25561286);
        double r25561289 = r25561288 * r25561285;
        double r25561290 = exp(r25561289);
        double r25561291 = -100.0;
        double r25561292 = fma(r25561287, r25561290, r25561291);
        double r25561293 = r25561286 / r25561292;
        double r25561294 = r25561284 / r25561293;
        double r25561295 = 0.004614392422049968;
        bool r25561296 = r25561281 <= r25561295;
        double r25561297 = 0.005;
        double r25561298 = r25561297 / r25561285;
        double r25561299 = r25561298 - r25561297;
        double r25561300 = 0.01;
        double r25561301 = r25561285 / r25561300;
        double r25561302 = r25561284 / r25561301;
        double r25561303 = fma(r25561286, r25561299, r25561302);
        double r25561304 = r25561284 / r25561303;
        double r25561305 = 3.108127690004362e+258;
        bool r25561306 = r25561281 <= r25561305;
        double r25561307 = 50.0;
        double r25561308 = log(r25561285);
        double r25561309 = r25561308 * r25561285;
        double r25561310 = r25561309 * r25561309;
        double r25561311 = 16.666666666666668;
        double r25561312 = log(r25561281);
        double r25561313 = r25561285 * r25561312;
        double r25561314 = r25561313 * r25561313;
        double r25561315 = r25561314 * r25561285;
        double r25561316 = r25561312 * r25561315;
        double r25561317 = r25561310 * r25561285;
        double r25561318 = r25561312 * r25561317;
        double r25561319 = r25561318 * r25561307;
        double r25561320 = r25561307 * r25561314;
        double r25561321 = r25561319 + r25561320;
        double r25561322 = fma(r25561287, r25561313, r25561321);
        double r25561323 = fma(r25561311, r25561316, r25561322);
        double r25561324 = fma(r25561307, r25561310, r25561323);
        double r25561325 = r25561285 * r25561285;
        double r25561326 = r25561308 * r25561325;
        double r25561327 = r25561312 * r25561307;
        double r25561328 = r25561326 * r25561327;
        double r25561329 = r25561312 * r25561312;
        double r25561330 = r25561325 * r25561309;
        double r25561331 = r25561329 * r25561330;
        double r25561332 = 33.333333333333336;
        double r25561333 = fma(r25561331, r25561332, r25561328);
        double r25561334 = r25561328 + r25561333;
        double r25561335 = r25561308 * r25561317;
        double r25561336 = r25561309 * r25561287;
        double r25561337 = fma(r25561331, r25561311, r25561336);
        double r25561338 = fma(r25561311, r25561335, r25561337);
        double r25561339 = r25561334 + r25561338;
        double r25561340 = r25561324 - r25561339;
        double r25561341 = r25561340 / r25561286;
        double r25561342 = r25561284 + r25561286;
        double r25561343 = pow(r25561342, r25561285);
        double r25561344 = r25561287 * r25561343;
        double r25561345 = r25561291 + r25561344;
        double r25561346 = r25561345 / r25561286;
        double r25561347 = r25561306 ? r25561341 : r25561346;
        double r25561348 = r25561296 ? r25561304 : r25561347;
        double r25561349 = r25561283 ? r25561294 : r25561348;
        return r25561349;
}

Error

Bits error versus i

Bits error versus n

Target

Original42.6
Target42.4
Herbie12.1
\[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 < -9.441810589112862e-06

    1. Initial program 28.7

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

      \[\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-log28.7

      \[\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-exp28.7

      \[\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. Simplified6.2

      \[\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 clear-num6.2

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

    if -9.441810589112862e-06 < i < 0.004614392422049968

    1. Initial program 50.0

      \[100 \cdot \frac{{\left(1 + \frac{i}{n}\right)}^{n} - 1}{\frac{i}{n}}\]
    2. Simplified50.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-log50.0

      \[\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-exp50.0

      \[\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. Simplified49.3

      \[\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 clear-num49.3

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

      \[\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. Simplified12.5

      \[\leadsto \frac{1}{\color{blue}{\mathsf{fma}\left(\left(\frac{i}{n}\right), \left(\frac{\frac{1}{200}}{n} - \frac{1}{200}\right), \left(\frac{\frac{1}{100}}{n}\right)\right)}}\]
    11. Using strategy rm
    12. Applied clear-num12.5

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

    if 0.004614392422049968 < i < 3.108127690004362e+258

    1. Initial program 33.1

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

      \[\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-log49.4

      \[\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-exp49.4

      \[\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. Simplified48.3

      \[\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. Taylor expanded around 0 18.1

      \[\leadsto \frac{\color{blue}{\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)}}{\frac{i}{n}}\]
    8. Simplified18.1

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

    if 3.108127690004362e+258 < i

    1. Initial program 28.2

      \[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({\left(1 + \frac{i}{n}\right)}^{n}\right), -100\right)}{\frac{i}{n}}}\]
    3. Using strategy rm
    4. Applied fma-udef28.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;i \le -9.441810589112862 \cdot 10^{-06}:\\ \;\;\;\;\frac{1}{\frac{\frac{i}{n}}{\mathsf{fma}\left(100, \left(e^{\mathsf{log1p}\left(\left(\frac{i}{n}\right)\right) \cdot n}\right), -100\right)}}\\ \mathbf{elif}\;i \le 0.004614392422049968:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(\left(\frac{i}{n}\right), \left(\frac{\frac{1}{200}}{n} - \frac{1}{200}\right), \left(\frac{1}{\frac{n}{\frac{1}{100}}}\right)\right)}\\ \mathbf{elif}\;i \le 3.108127690004362 \cdot 10^{+258}:\\ \;\;\;\;\frac{\mathsf{fma}\left(50, \left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right), \left(\mathsf{fma}\left(\frac{50}{3}, \left(\log i \cdot \left(\left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right) \cdot n\right)\right), \left(\mathsf{fma}\left(100, \left(n \cdot \log i\right), \left(\left(\log i \cdot \left(\left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right) \cdot n\right)\right) \cdot 50 + 50 \cdot \left(\left(n \cdot \log i\right) \cdot \left(n \cdot \log i\right)\right)\right)\right)\right)\right)\right)\right) - \left(\left(\left(\log n \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot 50\right) + \mathsf{fma}\left(\left(\left(\log i \cdot \log i\right) \cdot \left(\left(n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right), \frac{100}{3}, \left(\left(\log n \cdot \left(n \cdot n\right)\right) \cdot \left(\log i \cdot 50\right)\right)\right)\right) + \mathsf{fma}\left(\frac{50}{3}, \left(\log n \cdot \left(\left(\left(\log n \cdot n\right) \cdot \left(\log n \cdot n\right)\right) \cdot n\right)\right), \left(\mathsf{fma}\left(\left(\left(\log i \cdot \log i\right) \cdot \left(\left(n \cdot n\right) \cdot \left(\log n \cdot n\right)\right)\right), \frac{50}{3}, \left(\left(\log n \cdot n\right) \cdot 100\right)\right)\right)\right)\right)}{\frac{i}{n}}\\ \mathbf{else}:\\ \;\;\;\;\frac{-100 + 100 \cdot {\left(1 + \frac{i}{n}\right)}^{n}}{\frac{i}{n}}\\ \end{array}\]

Reproduce

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