Average Error: 58.5 → 0.2
Time: 28.9s
Precision: 64
\[\log \left(\frac{1.0 - \varepsilon}{1.0 + \varepsilon}\right)\]
\[\left(\frac{-2}{5} \cdot \frac{{\varepsilon}^{5}}{{1.0}^{5}} - \left(\frac{\varepsilon}{1.0} \cdot \frac{2}{3}\right) \cdot \left(\frac{\varepsilon}{1.0} \cdot \frac{\varepsilon}{1.0}\right)\right) - \varepsilon \cdot 2.0\]
\log \left(\frac{1.0 - \varepsilon}{1.0 + \varepsilon}\right)
\left(\frac{-2}{5} \cdot \frac{{\varepsilon}^{5}}{{1.0}^{5}} - \left(\frac{\varepsilon}{1.0} \cdot \frac{2}{3}\right) \cdot \left(\frac{\varepsilon}{1.0} \cdot \frac{\varepsilon}{1.0}\right)\right) - \varepsilon \cdot 2.0
double f(double eps) {
        double r4489681 = 1.0;
        double r4489682 = eps;
        double r4489683 = r4489681 - r4489682;
        double r4489684 = r4489681 + r4489682;
        double r4489685 = r4489683 / r4489684;
        double r4489686 = log(r4489685);
        return r4489686;
}

double f(double eps) {
        double r4489687 = -0.4;
        double r4489688 = eps;
        double r4489689 = 5.0;
        double r4489690 = pow(r4489688, r4489689);
        double r4489691 = 1.0;
        double r4489692 = pow(r4489691, r4489689);
        double r4489693 = r4489690 / r4489692;
        double r4489694 = r4489687 * r4489693;
        double r4489695 = r4489688 / r4489691;
        double r4489696 = 0.6666666666666666;
        double r4489697 = r4489695 * r4489696;
        double r4489698 = r4489695 * r4489695;
        double r4489699 = r4489697 * r4489698;
        double r4489700 = r4489694 - r4489699;
        double r4489701 = 2.0;
        double r4489702 = r4489688 * r4489701;
        double r4489703 = r4489700 - r4489702;
        return r4489703;
}

Error

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

Derivation

  1. Initial program 58.5

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

    \[\leadsto \color{blue}{\log \left(1.0 - \varepsilon\right) - \log \left(1.0 + \varepsilon\right)}\]
  4. Taylor expanded around 0 0.2

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

    \[\leadsto \color{blue}{\left(\frac{-2}{5} \cdot \frac{{\varepsilon}^{5}}{{1.0}^{5}} - \left(\frac{\varepsilon}{1.0} \cdot \frac{\varepsilon}{1.0}\right) \cdot \left(\frac{\varepsilon}{1.0} \cdot \frac{2}{3}\right)\right) - \varepsilon \cdot 2.0}\]
  6. Final simplification0.2

    \[\leadsto \left(\frac{-2}{5} \cdot \frac{{\varepsilon}^{5}}{{1.0}^{5}} - \left(\frac{\varepsilon}{1.0} \cdot \frac{2}{3}\right) \cdot \left(\frac{\varepsilon}{1.0} \cdot \frac{\varepsilon}{1.0}\right)\right) - \varepsilon \cdot 2.0\]

Reproduce

herbie shell --seed 2019165 
(FPCore (eps)
  :name "logq (problem 3.4.3)"

  :herbie-target
  (* -2.0 (+ (+ eps (/ (pow eps 3.0) 3.0)) (/ (pow eps 5.0) 5.0)))

  (log (/ (- 1.0 eps) (+ 1.0 eps))))