Average Error: 30.4 → 4.4
Time: 19.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 -5.35775335811664385649824258098630454492 \cdot 10^{69} \lor \neg \left(z \le 7.967156506649024971604719810103340041056 \cdot 10^{45}\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 -5.35775335811664385649824258098630454492 \cdot 10^{69} \lor \neg \left(z \le 7.967156506649024971604719810103340041056 \cdot 10^{45}\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 r346795 = x;
        double r346796 = y;
        double r346797 = z;
        double r346798 = 3.13060547623;
        double r346799 = r346797 * r346798;
        double r346800 = 11.1667541262;
        double r346801 = r346799 + r346800;
        double r346802 = r346801 * r346797;
        double r346803 = t;
        double r346804 = r346802 + r346803;
        double r346805 = r346804 * r346797;
        double r346806 = a;
        double r346807 = r346805 + r346806;
        double r346808 = r346807 * r346797;
        double r346809 = b;
        double r346810 = r346808 + r346809;
        double r346811 = r346796 * r346810;
        double r346812 = 15.234687407;
        double r346813 = r346797 + r346812;
        double r346814 = r346813 * r346797;
        double r346815 = 31.4690115749;
        double r346816 = r346814 + r346815;
        double r346817 = r346816 * r346797;
        double r346818 = 11.9400905721;
        double r346819 = r346817 + r346818;
        double r346820 = r346819 * r346797;
        double r346821 = 0.607771387771;
        double r346822 = r346820 + r346821;
        double r346823 = r346811 / r346822;
        double r346824 = r346795 + r346823;
        return r346824;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r346825 = z;
        double r346826 = -5.357753358116644e+69;
        bool r346827 = r346825 <= r346826;
        double r346828 = 7.967156506649025e+45;
        bool r346829 = r346825 <= r346828;
        double r346830 = !r346829;
        bool r346831 = r346827 || r346830;
        double r346832 = x;
        double r346833 = 3.13060547623;
        double r346834 = y;
        double r346835 = r346833 * r346834;
        double r346836 = t;
        double r346837 = r346836 * r346834;
        double r346838 = 2.0;
        double r346839 = pow(r346825, r346838);
        double r346840 = r346837 / r346839;
        double r346841 = r346835 + r346840;
        double r346842 = 36.527041698806414;
        double r346843 = r346834 / r346825;
        double r346844 = r346842 * r346843;
        double r346845 = r346841 - r346844;
        double r346846 = r346832 + r346845;
        double r346847 = 15.234687407;
        double r346848 = r346825 + r346847;
        double r346849 = r346848 * r346825;
        double r346850 = 31.4690115749;
        double r346851 = r346849 + r346850;
        double r346852 = r346851 * r346825;
        double r346853 = 11.9400905721;
        double r346854 = r346852 + r346853;
        double r346855 = r346854 * r346825;
        double r346856 = 0.607771387771;
        double r346857 = r346855 + r346856;
        double r346858 = r346825 * r346833;
        double r346859 = 11.1667541262;
        double r346860 = r346858 + r346859;
        double r346861 = r346860 * r346825;
        double r346862 = r346861 + r346836;
        double r346863 = r346862 * r346825;
        double r346864 = a;
        double r346865 = r346863 + r346864;
        double r346866 = r346865 * r346825;
        double r346867 = b;
        double r346868 = r346866 + r346867;
        double r346869 = r346857 / r346868;
        double r346870 = r346834 / r346869;
        double r346871 = r346832 + r346870;
        double r346872 = r346831 ? r346846 : r346871;
        return r346872;
}

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

Original30.4
Target1.0
Herbie4.4
\[\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 < -5.357753358116644e+69 or 7.967156506649025e+45 < z

    1. Initial program 61.7

      \[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.8

      \[\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 -5.357753358116644e+69 < z < 7.967156506649025e+45

    1. Initial program 3.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*1.4

      \[\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.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -5.35775335811664385649824258098630454492 \cdot 10^{69} \lor \neg \left(z \le 7.967156506649024971604719810103340041056 \cdot 10^{45}\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 2019297 
(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.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))

  (+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))