Average Error: 20.0 → 0.5
Time: 3.5s
Precision: 64
\[x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\]
\[\begin{array}{l} \mathbf{if}\;z \le -31.3780939790472395 \lor \neg \left(z \le 1.075597970485127 \cdot 10^{-7}\right):\\ \;\;\;\;x + \left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;x + \left(y \cdot \left(0.083333333333333232 - 0.002777777777517226 \cdot z\right) + 7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right)\right)\\ \end{array}\]
x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}
\begin{array}{l}
\mathbf{if}\;z \le -31.3780939790472395 \lor \neg \left(z \le 1.075597970485127 \cdot 10^{-7}\right):\\
\;\;\;\;x + \left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right)\\

\mathbf{else}:\\
\;\;\;\;x + \left(y \cdot \left(0.083333333333333232 - 0.002777777777517226 \cdot z\right) + 7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right)\right)\\

\end{array}
double f(double x, double y, double z) {
        double r418567 = x;
        double r418568 = y;
        double r418569 = z;
        double r418570 = 0.0692910599291889;
        double r418571 = r418569 * r418570;
        double r418572 = 0.4917317610505968;
        double r418573 = r418571 + r418572;
        double r418574 = r418573 * r418569;
        double r418575 = 0.279195317918525;
        double r418576 = r418574 + r418575;
        double r418577 = r418568 * r418576;
        double r418578 = 6.012459259764103;
        double r418579 = r418569 + r418578;
        double r418580 = r418579 * r418569;
        double r418581 = 3.350343815022304;
        double r418582 = r418580 + r418581;
        double r418583 = r418577 / r418582;
        double r418584 = r418567 + r418583;
        return r418584;
}

double f(double x, double y, double z) {
        double r418585 = z;
        double r418586 = -31.37809397904724;
        bool r418587 = r418585 <= r418586;
        double r418588 = 1.075597970485127e-07;
        bool r418589 = r418585 <= r418588;
        double r418590 = !r418589;
        bool r418591 = r418587 || r418590;
        double r418592 = x;
        double r418593 = 0.07512208616047561;
        double r418594 = y;
        double r418595 = r418594 / r418585;
        double r418596 = r418593 * r418595;
        double r418597 = 0.0692910599291889;
        double r418598 = r418597 * r418594;
        double r418599 = r418596 + r418598;
        double r418600 = r418592 + r418599;
        double r418601 = 0.08333333333333323;
        double r418602 = 0.0027777777775172263;
        double r418603 = r418602 * r418585;
        double r418604 = r418601 - r418603;
        double r418605 = r418594 * r418604;
        double r418606 = 0.0007936505811533753;
        double r418607 = 2.0;
        double r418608 = pow(r418585, r418607);
        double r418609 = r418608 * r418594;
        double r418610 = r418606 * r418609;
        double r418611 = r418605 + r418610;
        double r418612 = r418592 + r418611;
        double r418613 = r418591 ? r418600 : r418612;
        return r418613;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original20.0
Target0.2
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;z \lt -8120153.6524566747:\\ \;\;\;\;\left(\frac{0.07512208616047561}{z} + 0.0692910599291888946\right) \cdot y - \left(\frac{0.404622038699921249 \cdot y}{z \cdot z} - x\right)\\ \mathbf{elif}\;z \lt 657611897278737680000:\\ \;\;\;\;x + \left(y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)\right) \cdot \frac{1}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{0.07512208616047561}{z} + 0.0692910599291888946\right) \cdot y - \left(\frac{0.404622038699921249 \cdot y}{z \cdot z} - x\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -31.37809397904724 or 1.075597970485127e-07 < z

    1. Initial program 39.4

      \[x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\]
    2. Taylor expanded around inf 0.7

      \[\leadsto \color{blue}{x + \left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right)}\]

    if -31.37809397904724 < z < 1.075597970485127e-07

    1. Initial program 0.1

      \[x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\]
    2. Using strategy rm
    3. Applied associate-/l*0.2

      \[\leadsto x + \color{blue}{\frac{y}{\frac{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}}}\]
    4. Taylor expanded around 0 0.3

      \[\leadsto x + \color{blue}{\left(\left(7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right) + 0.083333333333333232 \cdot y\right) - 0.002777777777517226 \cdot \left(z \cdot y\right)\right)}\]
    5. Simplified0.3

      \[\leadsto x + \color{blue}{\left(y \cdot \left(0.083333333333333232 - 0.002777777777517226 \cdot z\right) + 7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -31.3780939790472395 \lor \neg \left(z \le 1.075597970485127 \cdot 10^{-7}\right):\\ \;\;\;\;x + \left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right)\\ \mathbf{else}:\\ \;\;\;\;x + \left(y \cdot \left(0.083333333333333232 - 0.002777777777517226 \cdot z\right) + 7.936505811533753 \cdot 10^{-4} \cdot \left({z}^{2} \cdot y\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020060 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
  :precision binary64

  :herbie-target
  (if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))

  (+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))