Average Error: 29.2 → 4.6
Time: 27.0s
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 r266664 = x;
        double r266665 = y;
        double r266666 = z;
        double r266667 = 3.13060547623;
        double r266668 = r266666 * r266667;
        double r266669 = 11.1667541262;
        double r266670 = r266668 + r266669;
        double r266671 = r266670 * r266666;
        double r266672 = t;
        double r266673 = r266671 + r266672;
        double r266674 = r266673 * r266666;
        double r266675 = a;
        double r266676 = r266674 + r266675;
        double r266677 = r266676 * r266666;
        double r266678 = b;
        double r266679 = r266677 + r266678;
        double r266680 = r266665 * r266679;
        double r266681 = 15.234687407;
        double r266682 = r266666 + r266681;
        double r266683 = r266682 * r266666;
        double r266684 = 31.4690115749;
        double r266685 = r266683 + r266684;
        double r266686 = r266685 * r266666;
        double r266687 = 11.9400905721;
        double r266688 = r266686 + r266687;
        double r266689 = r266688 * r266666;
        double r266690 = 0.607771387771;
        double r266691 = r266689 + r266690;
        double r266692 = r266680 / r266691;
        double r266693 = r266664 + r266692;
        return r266693;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r266694 = z;
        double r266695 = -2.5432980834761282e+70;
        bool r266696 = r266694 <= r266695;
        double r266697 = 2.610770306171522e+63;
        bool r266698 = r266694 <= r266697;
        double r266699 = !r266698;
        bool r266700 = r266696 || r266699;
        double r266701 = x;
        double r266702 = 3.13060547623;
        double r266703 = y;
        double r266704 = r266702 * r266703;
        double r266705 = t;
        double r266706 = r266705 * r266703;
        double r266707 = 2.0;
        double r266708 = pow(r266694, r266707);
        double r266709 = r266706 / r266708;
        double r266710 = r266704 + r266709;
        double r266711 = 36.527041698806414;
        double r266712 = r266703 / r266694;
        double r266713 = r266711 * r266712;
        double r266714 = r266710 - r266713;
        double r266715 = r266701 + r266714;
        double r266716 = 15.234687407;
        double r266717 = r266694 + r266716;
        double r266718 = r266717 * r266694;
        double r266719 = 31.4690115749;
        double r266720 = r266718 + r266719;
        double r266721 = r266720 * r266694;
        double r266722 = 11.9400905721;
        double r266723 = r266721 + r266722;
        double r266724 = r266723 * r266694;
        double r266725 = 0.607771387771;
        double r266726 = r266724 + r266725;
        double r266727 = r266694 * r266702;
        double r266728 = 11.1667541262;
        double r266729 = r266727 + r266728;
        double r266730 = r266729 * r266694;
        double r266731 = r266730 + r266705;
        double r266732 = r266731 * r266694;
        double r266733 = a;
        double r266734 = r266732 + r266733;
        double r266735 = r266734 * r266694;
        double r266736 = b;
        double r266737 = r266735 + r266736;
        double r266738 = r266726 / r266737;
        double r266739 = r266703 / r266738;
        double r266740 = r266701 + r266739;
        double r266741 = r266700 ? r266715 : r266740;
        return r266741;
}

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))))