Average Error: 20.5 → 0.4
Time: 4.7s
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 -1.743972544360285 \cdot 10^{154}:\\ \;\;\;\;x + \frac{y}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\ \mathbf{elif}\;z \le 8.4817809066997952 \cdot 10^{-11}:\\ \;\;\;\;x + y \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{1}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\ \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 -1.743972544360285 \cdot 10^{154}:\\
\;\;\;\;x + \frac{y}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\

\mathbf{elif}\;z \le 8.4817809066997952 \cdot 10^{-11}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\

\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{1}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\

\end{array}
double f(double x, double y, double z) {
        double r368832 = x;
        double r368833 = y;
        double r368834 = z;
        double r368835 = 0.0692910599291889;
        double r368836 = r368834 * r368835;
        double r368837 = 0.4917317610505968;
        double r368838 = r368836 + r368837;
        double r368839 = r368838 * r368834;
        double r368840 = 0.279195317918525;
        double r368841 = r368839 + r368840;
        double r368842 = r368833 * r368841;
        double r368843 = 6.012459259764103;
        double r368844 = r368834 + r368843;
        double r368845 = r368844 * r368834;
        double r368846 = 3.350343815022304;
        double r368847 = r368845 + r368846;
        double r368848 = r368842 / r368847;
        double r368849 = r368832 + r368848;
        return r368849;
}

double f(double x, double y, double z) {
        double r368850 = z;
        double r368851 = -1.743972544360285e+154;
        bool r368852 = r368850 <= r368851;
        double r368853 = x;
        double r368854 = y;
        double r368855 = 14.431876219268938;
        double r368856 = 15.646356830292035;
        double r368857 = 1.0;
        double r368858 = r368857 / r368850;
        double r368859 = r368856 * r368858;
        double r368860 = r368855 - r368859;
        double r368861 = 101.23733352003816;
        double r368862 = r368861 / r368850;
        double r368863 = r368862 / r368850;
        double r368864 = r368860 + r368863;
        double r368865 = r368854 / r368864;
        double r368866 = r368853 + r368865;
        double r368867 = 8.481780906699795e-11;
        bool r368868 = r368850 <= r368867;
        double r368869 = 0.0692910599291889;
        double r368870 = r368850 * r368869;
        double r368871 = 0.4917317610505968;
        double r368872 = r368870 + r368871;
        double r368873 = r368872 * r368850;
        double r368874 = 0.279195317918525;
        double r368875 = r368873 + r368874;
        double r368876 = 6.012459259764103;
        double r368877 = r368850 + r368876;
        double r368878 = r368877 * r368850;
        double r368879 = 3.350343815022304;
        double r368880 = r368878 + r368879;
        double r368881 = r368875 / r368880;
        double r368882 = r368854 * r368881;
        double r368883 = r368853 + r368882;
        double r368884 = r368857 / r368864;
        double r368885 = r368854 * r368884;
        double r368886 = r368853 + r368885;
        double r368887 = r368868 ? r368883 : r368886;
        double r368888 = r368852 ? r368866 : r368887;
        return r368888;
}

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.5
Target0.2
Herbie0.4
\[\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 3 regimes
  2. if z < -1.743972544360285e+154

    1. Initial program 63.9

      \[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*63.9

      \[\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 inf 0.1

      \[\leadsto x + \frac{y}{\color{blue}{\left(101.23733352003816 \cdot \frac{1}{{z}^{2}} + 14.431876219268938\right) - 15.646356830292035 \cdot \frac{1}{z}}}\]
    5. Simplified0.1

      \[\leadsto x + \frac{y}{\color{blue}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}}\]

    if -1.743972544360285e+154 < z < 8.481780906699795e-11

    1. Initial program 3.8

      \[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 *-un-lft-identity3.8

      \[\leadsto x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\color{blue}{1 \cdot \left(\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394\right)}}\]
    4. Applied times-frac0.1

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}}\]
    5. Simplified0.1

      \[\leadsto x + \color{blue}{y} \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\]

    if 8.481780906699795e-11 < z

    1. Initial program 38.9

      \[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*30.6

      \[\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 inf 1.4

      \[\leadsto x + \frac{y}{\color{blue}{\left(101.23733352003816 \cdot \frac{1}{{z}^{2}} + 14.431876219268938\right) - 15.646356830292035 \cdot \frac{1}{z}}}\]
    5. Simplified1.4

      \[\leadsto x + \frac{y}{\color{blue}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}}\]
    6. Using strategy rm
    7. Applied div-inv1.3

      \[\leadsto x + \color{blue}{y \cdot \frac{1}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.743972544360285 \cdot 10^{154}:\\ \;\;\;\;x + \frac{y}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\ \mathbf{elif}\;z \le 8.4817809066997952 \cdot 10^{-11}:\\ \;\;\;\;x + y \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{1}{\left(14.431876219268938 - 15.646356830292035 \cdot \frac{1}{z}\right) + \frac{\frac{101.23733352003816}{z}}{z}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020018 
(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))))