Average Error: 29.2 → 4.6
Time: 27.5s
Precision: 64
\[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
\[\begin{array}{l} \mathbf{if}\;z \le -2.543298083476128238862421340438293592178 \cdot 10^{70} \lor \neg \left(z \le 2.610770306171521983695485978089202927343 \cdot 10^{63}\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\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.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}
\begin{array}{l}
\mathbf{if}\;z \le -2.543298083476128238862421340438293592178 \cdot 10^{70} \lor \neg \left(z \le 2.610770306171521983695485978089202927343 \cdot 10^{63}\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\

\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\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 r250736 = x;
        double r250737 = y;
        double r250738 = z;
        double r250739 = 3.13060547623;
        double r250740 = r250738 * r250739;
        double r250741 = 11.1667541262;
        double r250742 = r250740 + r250741;
        double r250743 = r250742 * r250738;
        double r250744 = t;
        double r250745 = r250743 + r250744;
        double r250746 = r250745 * r250738;
        double r250747 = a;
        double r250748 = r250746 + r250747;
        double r250749 = r250748 * r250738;
        double r250750 = b;
        double r250751 = r250749 + r250750;
        double r250752 = r250737 * r250751;
        double r250753 = 15.234687407;
        double r250754 = r250738 + r250753;
        double r250755 = r250754 * r250738;
        double r250756 = 31.4690115749;
        double r250757 = r250755 + r250756;
        double r250758 = r250757 * r250738;
        double r250759 = 11.9400905721;
        double r250760 = r250758 + r250759;
        double r250761 = r250760 * r250738;
        double r250762 = 0.607771387771;
        double r250763 = r250761 + r250762;
        double r250764 = r250752 / r250763;
        double r250765 = r250736 + r250764;
        return r250765;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r250766 = z;
        double r250767 = -2.5432980834761282e+70;
        bool r250768 = r250766 <= r250767;
        double r250769 = 2.610770306171522e+63;
        bool r250770 = r250766 <= r250769;
        double r250771 = !r250770;
        bool r250772 = r250768 || r250771;
        double r250773 = x;
        double r250774 = 3.13060547623;
        double r250775 = y;
        double r250776 = r250774 * r250775;
        double r250777 = t;
        double r250778 = r250777 * r250775;
        double r250779 = 2.0;
        double r250780 = pow(r250766, r250779);
        double r250781 = r250778 / r250780;
        double r250782 = r250776 + r250781;
        double r250783 = 36.527041698806414;
        double r250784 = r250775 / r250766;
        double r250785 = r250783 * r250784;
        double r250786 = r250782 - r250785;
        double r250787 = r250773 + r250786;
        double r250788 = 15.234687407;
        double r250789 = r250766 + r250788;
        double r250790 = r250789 * r250766;
        double r250791 = 31.4690115749;
        double r250792 = r250790 + r250791;
        double r250793 = r250792 * r250766;
        double r250794 = 11.9400905721;
        double r250795 = r250793 + r250794;
        double r250796 = r250795 * r250766;
        double r250797 = 0.607771387771;
        double r250798 = r250796 + r250797;
        double r250799 = r250766 * r250774;
        double r250800 = 11.1667541262;
        double r250801 = r250799 + r250800;
        double r250802 = r250801 * r250766;
        double r250803 = r250802 + r250777;
        double r250804 = r250803 * r250766;
        double r250805 = a;
        double r250806 = r250804 + r250805;
        double r250807 = r250806 * r250766;
        double r250808 = b;
        double r250809 = r250807 + r250808;
        double r250810 = r250798 / r250809;
        double r250811 = r250775 / r250810;
        double r250812 = r250773 + r250811;
        double r250813 = r250772 ? r250787 : r250812;
        return r250813;
}

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.2
Target1.1
Herbie4.6
\[\begin{array}{l} \mathbf{if}\;z \lt -6.499344996252631754123144978817242590467 \cdot 10^{53}:\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 - \frac{36.52704169880641416057187598198652267456}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \mathbf{elif}\;z \lt 7.066965436914286795694558389038333165002 \cdot 10^{59}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 - \frac{36.52704169880641416057187598198652267456}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -2.5432980834761282e+70 or 2.610770306171522e+63 < z

    1. Initial program 62.9

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
    2. Taylor expanded around inf 7.9

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

    if -2.5432980834761282e+70 < z < 2.610770306171522e+63

    1. Initial program 4.4

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\]
    2. Using strategy rm
    3. Applied associate-/l*2.1

      \[\leadsto x + \color{blue}{\frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -2.543298083476128238862421340438293592178 \cdot 10^{70} \lor \neg \left(z \le 2.610770306171521983695485978089202927343 \cdot 10^{63}\right):\\ \;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \end{array}\]

Reproduce

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