Average Error: 6.0 → 6.0
Time: 13.7s
Precision: 64
\[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
\[\left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\mathsf{log1p}\left(x\right)\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956\right) \cdot \frac{1}{x}\]
\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}
\left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\mathsf{log1p}\left(x\right)\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956\right) \cdot \frac{1}{x}
double f(double x, double y, double z) {
        double r511387 = x;
        double r511388 = 0.5;
        double r511389 = r511387 - r511388;
        double r511390 = log(r511387);
        double r511391 = r511389 * r511390;
        double r511392 = r511391 - r511387;
        double r511393 = 0.91893853320467;
        double r511394 = r511392 + r511393;
        double r511395 = y;
        double r511396 = 0.0007936500793651;
        double r511397 = r511395 + r511396;
        double r511398 = z;
        double r511399 = r511397 * r511398;
        double r511400 = 0.0027777777777778;
        double r511401 = r511399 - r511400;
        double r511402 = r511401 * r511398;
        double r511403 = 0.083333333333333;
        double r511404 = r511402 + r511403;
        double r511405 = r511404 / r511387;
        double r511406 = r511394 + r511405;
        return r511406;
}

double f(double x, double y, double z) {
        double r511407 = x;
        double r511408 = 0.5;
        double r511409 = r511407 - r511408;
        double r511410 = log(r511407);
        double r511411 = log1p(r511407);
        double r511412 = expm1(r511411);
        double r511413 = -r511412;
        double r511414 = fma(r511409, r511410, r511413);
        double r511415 = 0.0;
        double r511416 = r511407 * r511415;
        double r511417 = 0.91893853320467;
        double r511418 = r511416 + r511417;
        double r511419 = r511414 + r511418;
        double r511420 = y;
        double r511421 = 0.0007936500793651;
        double r511422 = r511420 + r511421;
        double r511423 = z;
        double r511424 = r511422 * r511423;
        double r511425 = 0.0027777777777778;
        double r511426 = r511424 - r511425;
        double r511427 = r511426 * r511423;
        double r511428 = 0.083333333333333;
        double r511429 = r511427 + r511428;
        double r511430 = 1.0;
        double r511431 = r511430 / r511407;
        double r511432 = r511429 * r511431;
        double r511433 = r511419 + r511432;
        return r511433;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original6.0
Target1.1
Herbie6.0
\[\left(\left(\left(x - 0.5\right) \cdot \log x + \left(0.91893853320467001 - x\right)\right) + \frac{0.0833333333333329956}{x}\right) + \frac{z}{x} \cdot \left(z \cdot \left(y + 7.93650079365100015 \cdot 10^{-4}\right) - 0.0027777777777778\right)\]

Derivation

  1. Initial program 6.0

    \[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  2. Using strategy rm
  3. Applied add-sqr-sqrt6.0

    \[\leadsto \left(\left(\left(x - 0.5\right) \cdot \log x - \color{blue}{\sqrt{x} \cdot \sqrt{x}}\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  4. Applied prod-diff6.0

    \[\leadsto \left(\color{blue}{\left(\mathsf{fma}\left(x - 0.5, \log x, -\sqrt{x} \cdot \sqrt{x}\right) + \mathsf{fma}\left(-\sqrt{x}, \sqrt{x}, \sqrt{x} \cdot \sqrt{x}\right)\right)} + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  5. Applied associate-+l+6.0

    \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x - 0.5, \log x, -\sqrt{x} \cdot \sqrt{x}\right) + \left(\mathsf{fma}\left(-\sqrt{x}, \sqrt{x}, \sqrt{x} \cdot \sqrt{x}\right) + 0.91893853320467001\right)\right)} + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  6. Simplified6.0

    \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, -\sqrt{x} \cdot \sqrt{x}\right) + \color{blue}{\left(x \cdot 0 + 0.91893853320467001\right)}\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  7. Using strategy rm
  8. Applied expm1-log1p-u5.9

    \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, -\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt{x} \cdot \sqrt{x}\right)\right)}\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  9. Simplified5.9

    \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(x\right)}\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
  10. Using strategy rm
  11. Applied div-inv6.0

    \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\mathsf{log1p}\left(x\right)\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \color{blue}{\left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956\right) \cdot \frac{1}{x}}\]
  12. Final simplification6.0

    \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, -\mathsf{expm1}\left(\mathsf{log1p}\left(x\right)\right)\right) + \left(x \cdot 0 + 0.91893853320467001\right)\right) + \left(\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956\right) \cdot \frac{1}{x}\]

Reproduce

herbie shell --seed 2020047 +o rules:numerics
(FPCore (x y z)
  :name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
  :precision binary64

  :herbie-target
  (+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))

  (+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))