Average Error: 29.4 → 4.9
Time: 15.6s
Precision: 64
\[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
\[\begin{array}{l} \mathbf{if}\;z \le -441648319598393860 \lor \neg \left(z \le 706881567136002.375\right):\\ \;\;\;\;x + \left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \end{array}\]
x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}
\begin{array}{l}
\mathbf{if}\;z \le -441648319598393860 \lor \neg \left(z \le 706881567136002.375\right):\\
\;\;\;\;x + \left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r353977 = x;
        double r353978 = y;
        double r353979 = z;
        double r353980 = 3.13060547623;
        double r353981 = r353979 * r353980;
        double r353982 = 11.1667541262;
        double r353983 = r353981 + r353982;
        double r353984 = r353983 * r353979;
        double r353985 = t;
        double r353986 = r353984 + r353985;
        double r353987 = r353986 * r353979;
        double r353988 = a;
        double r353989 = r353987 + r353988;
        double r353990 = r353989 * r353979;
        double r353991 = b;
        double r353992 = r353990 + r353991;
        double r353993 = r353978 * r353992;
        double r353994 = 15.234687407;
        double r353995 = r353979 + r353994;
        double r353996 = r353995 * r353979;
        double r353997 = 31.4690115749;
        double r353998 = r353996 + r353997;
        double r353999 = r353998 * r353979;
        double r354000 = 11.9400905721;
        double r354001 = r353999 + r354000;
        double r354002 = r354001 * r353979;
        double r354003 = 0.607771387771;
        double r354004 = r354002 + r354003;
        double r354005 = r353993 / r354004;
        double r354006 = r353977 + r354005;
        return r354006;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r354007 = z;
        double r354008 = -4.4164831959839386e+17;
        bool r354009 = r354007 <= r354008;
        double r354010 = 706881567136002.4;
        bool r354011 = r354007 <= r354010;
        double r354012 = !r354011;
        bool r354013 = r354009 || r354012;
        double r354014 = x;
        double r354015 = 3.13060547623;
        double r354016 = y;
        double r354017 = r354015 * r354016;
        double r354018 = t;
        double r354019 = r354018 * r354016;
        double r354020 = 2.0;
        double r354021 = pow(r354007, r354020);
        double r354022 = r354019 / r354021;
        double r354023 = r354017 + r354022;
        double r354024 = 36.527041698806414;
        double r354025 = r354016 / r354007;
        double r354026 = r354024 * r354025;
        double r354027 = r354023 - r354026;
        double r354028 = r354014 + r354027;
        double r354029 = 15.234687407;
        double r354030 = r354007 + r354029;
        double r354031 = r354030 * r354007;
        double r354032 = 31.4690115749;
        double r354033 = r354031 + r354032;
        double r354034 = r354033 * r354007;
        double r354035 = 11.9400905721;
        double r354036 = r354034 + r354035;
        double r354037 = r354036 * r354007;
        double r354038 = 0.607771387771;
        double r354039 = r354037 + r354038;
        double r354040 = r354007 * r354015;
        double r354041 = 11.1667541262;
        double r354042 = r354040 + r354041;
        double r354043 = r354042 * r354007;
        double r354044 = r354043 + r354018;
        double r354045 = r354044 * r354007;
        double r354046 = a;
        double r354047 = r354045 + r354046;
        double r354048 = r354047 * r354007;
        double r354049 = b;
        double r354050 = r354048 + r354049;
        double r354051 = r354039 / r354050;
        double r354052 = r354016 / r354051;
        double r354053 = r354014 + r354052;
        double r354054 = r354013 ? r354028 : r354053;
        return r354054;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original29.4
Target1.2
Herbie4.9
\[\begin{array}{l} \mathbf{if}\;z \lt -6.4993449962526318 \cdot 10^{53}:\\ \;\;\;\;x + \left(\left(3.13060547622999996 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \mathbf{elif}\;z \lt 7.0669654369142868 \cdot 10^{59}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\left(3.13060547622999996 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -4.4164831959839386e+17 or 706881567136002.4 < z

    1. Initial program 56.9

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    2. Taylor expanded around inf 9.3

      \[\leadsto x + \color{blue}{\left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)}\]

    if -4.4164831959839386e+17 < z < 706881567136002.4

    1. Initial program 0.5

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\]
    2. Using strategy rm
    3. Applied associate-/l*0.2

      \[\leadsto x + \color{blue}{\frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -441648319598393860 \lor \neg \left(z \le 706881567136002.375\right):\\ \;\;\;\;x + \left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020045 
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
  :precision binary64

  :herbie-target
  (if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))

  (+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))