Average Error: 0.2 → 0.1
Time: 1.0m
Precision: 64
\[\frac{6 \cdot \left(x - 1\right)}{\left(x + 1\right) + 4 \cdot \sqrt{x}}\]
\[\frac{x}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}} - \frac{1}{\frac{1}{\frac{6}{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}}}\]
\frac{6 \cdot \left(x - 1\right)}{\left(x + 1\right) + 4 \cdot \sqrt{x}}
\frac{x}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}} - \frac{1}{\frac{1}{\frac{6}{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}}}
double f(double x) {
        double r32925285 = 6.0;
        double r32925286 = x;
        double r32925287 = 1.0;
        double r32925288 = r32925286 - r32925287;
        double r32925289 = r32925285 * r32925288;
        double r32925290 = r32925286 + r32925287;
        double r32925291 = 4.0;
        double r32925292 = sqrt(r32925286);
        double r32925293 = r32925291 * r32925292;
        double r32925294 = r32925290 + r32925293;
        double r32925295 = r32925289 / r32925294;
        return r32925295;
}

double f(double x) {
        double r32925296 = x;
        double r32925297 = sqrt(r32925296);
        double r32925298 = 4.0;
        double r32925299 = 1.0;
        double r32925300 = r32925299 + r32925296;
        double r32925301 = fma(r32925297, r32925298, r32925300);
        double r32925302 = 6.0;
        double r32925303 = r32925301 / r32925302;
        double r32925304 = r32925296 / r32925303;
        double r32925305 = 1.0;
        double r32925306 = r32925302 / r32925301;
        double r32925307 = r32925305 / r32925306;
        double r32925308 = r32925299 / r32925307;
        double r32925309 = r32925304 - r32925308;
        return r32925309;
}

Error

Bits error versus x

Target

Original0.2
Target0.1
Herbie0.1
\[\frac{6}{\frac{\left(x + 1\right) + 4 \cdot \sqrt{x}}{x - 1}}\]

Derivation

  1. Initial program 0.2

    \[\frac{6 \cdot \left(x - 1\right)}{\left(x + 1\right) + 4 \cdot \sqrt{x}}\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\frac{x - 1}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}}}\]
  3. Using strategy rm
  4. Applied div-sub0.1

    \[\leadsto \color{blue}{\frac{x}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}} - \frac{1}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}}}\]
  5. Using strategy rm
  6. Applied clear-num0.1

    \[\leadsto \frac{x}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}} - \frac{1}{\color{blue}{\frac{1}{\frac{6}{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}}}}\]
  7. Final simplification0.1

    \[\leadsto \frac{x}{\frac{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}{6}} - \frac{1}{\frac{1}{\frac{6}{\mathsf{fma}\left(\sqrt{x}, 4, 1 + x\right)}}}\]

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(FPCore (x)
  :name "Data.Approximate.Numerics:blog from approximate-0.2.2.1"

  :herbie-target
  (/ 6.0 (/ (+ (+ x 1.0) (* 4.0 (sqrt x))) (- x 1.0)))

  (/ (* 6.0 (- x 1.0)) (+ (+ x 1.0) (* 4.0 (sqrt x)))))