Average Error: 58.5 → 0.3
Time: 14.6s
Precision: 64
\[\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)\]
\[\mathsf{fma}\left(\frac{-2}{3}, {\left(\frac{\varepsilon}{1}\right)}^{3}, -\mathsf{fma}\left(\frac{2}{5}, \frac{{\varepsilon}^{5}}{{1}^{5}}, 2 \cdot \varepsilon\right)\right)\]
\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)
\mathsf{fma}\left(\frac{-2}{3}, {\left(\frac{\varepsilon}{1}\right)}^{3}, -\mathsf{fma}\left(\frac{2}{5}, \frac{{\varepsilon}^{5}}{{1}^{5}}, 2 \cdot \varepsilon\right)\right)
double f(double eps) {
        double r43536 = 1.0;
        double r43537 = eps;
        double r43538 = r43536 - r43537;
        double r43539 = r43536 + r43537;
        double r43540 = r43538 / r43539;
        double r43541 = log(r43540);
        return r43541;
}

double f(double eps) {
        double r43542 = -0.6666666666666666;
        double r43543 = eps;
        double r43544 = 1.0;
        double r43545 = r43543 / r43544;
        double r43546 = 3.0;
        double r43547 = pow(r43545, r43546);
        double r43548 = 0.4;
        double r43549 = 5.0;
        double r43550 = pow(r43543, r43549);
        double r43551 = pow(r43544, r43549);
        double r43552 = r43550 / r43551;
        double r43553 = 2.0;
        double r43554 = r43553 * r43543;
        double r43555 = fma(r43548, r43552, r43554);
        double r43556 = -r43555;
        double r43557 = fma(r43542, r43547, r43556);
        return r43557;
}

Error

Bits error versus eps

Target

Original58.5
Target0.3
Herbie0.3
\[-2 \cdot \left(\left(\varepsilon + \frac{{\varepsilon}^{3}}{3}\right) + \frac{{\varepsilon}^{5}}{5}\right)\]

Derivation

  1. Initial program 58.5

    \[\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)\]
  2. Using strategy rm
  3. Applied log-div58.5

    \[\leadsto \color{blue}{\log \left(1 - \varepsilon\right) - \log \left(1 + \varepsilon\right)}\]
  4. Simplified58.5

    \[\leadsto \log \left(1 - \varepsilon\right) - \color{blue}{\log \left(\varepsilon + 1\right)}\]
  5. Taylor expanded around 0 0.3

    \[\leadsto \color{blue}{-\left(\frac{2}{3} \cdot \frac{{\varepsilon}^{3}}{{1}^{3}} + \left(\frac{2}{5} \cdot \frac{{\varepsilon}^{5}}{{1}^{5}} + 2 \cdot \varepsilon\right)\right)}\]
  6. Simplified0.3

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{-2}{3}, {\left(\frac{\varepsilon}{1}\right)}^{3}, -\mathsf{fma}\left(\frac{2}{5}, \frac{{\varepsilon}^{5}}{{1}^{5}}, 2 \cdot \varepsilon\right)\right)}\]
  7. Final simplification0.3

    \[\leadsto \mathsf{fma}\left(\frac{-2}{3}, {\left(\frac{\varepsilon}{1}\right)}^{3}, -\mathsf{fma}\left(\frac{2}{5}, \frac{{\varepsilon}^{5}}{{1}^{5}}, 2 \cdot \varepsilon\right)\right)\]

Reproduce

herbie shell --seed 2019303 +o rules:numerics
(FPCore (eps)
  :name "logq (problem 3.4.3)"
  :precision binary64

  :herbie-target
  (* -2 (+ (+ eps (/ (pow eps 3) 3)) (/ (pow eps 5) 5)))

  (log (/ (- 1 eps) (+ 1 eps))))