Average Error: 29.6 → 4.7
Time: 5.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 -6.50311312171162177 \cdot 10^{54} \lor \neg \left(z \le 8.9425971063945801 \cdot 10^{37}\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 -6.50311312171162177 \cdot 10^{54} \lor \neg \left(z \le 8.9425971063945801 \cdot 10^{37}\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 r381754 = x;
        double r381755 = y;
        double r381756 = z;
        double r381757 = 3.13060547623;
        double r381758 = r381756 * r381757;
        double r381759 = 11.1667541262;
        double r381760 = r381758 + r381759;
        double r381761 = r381760 * r381756;
        double r381762 = t;
        double r381763 = r381761 + r381762;
        double r381764 = r381763 * r381756;
        double r381765 = a;
        double r381766 = r381764 + r381765;
        double r381767 = r381766 * r381756;
        double r381768 = b;
        double r381769 = r381767 + r381768;
        double r381770 = r381755 * r381769;
        double r381771 = 15.234687407;
        double r381772 = r381756 + r381771;
        double r381773 = r381772 * r381756;
        double r381774 = 31.4690115749;
        double r381775 = r381773 + r381774;
        double r381776 = r381775 * r381756;
        double r381777 = 11.9400905721;
        double r381778 = r381776 + r381777;
        double r381779 = r381778 * r381756;
        double r381780 = 0.607771387771;
        double r381781 = r381779 + r381780;
        double r381782 = r381770 / r381781;
        double r381783 = r381754 + r381782;
        return r381783;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r381784 = z;
        double r381785 = -6.503113121711622e+54;
        bool r381786 = r381784 <= r381785;
        double r381787 = 8.94259710639458e+37;
        bool r381788 = r381784 <= r381787;
        double r381789 = !r381788;
        bool r381790 = r381786 || r381789;
        double r381791 = x;
        double r381792 = 3.13060547623;
        double r381793 = y;
        double r381794 = r381792 * r381793;
        double r381795 = t;
        double r381796 = r381795 * r381793;
        double r381797 = 2.0;
        double r381798 = pow(r381784, r381797);
        double r381799 = r381796 / r381798;
        double r381800 = r381794 + r381799;
        double r381801 = 36.527041698806414;
        double r381802 = r381793 / r381784;
        double r381803 = r381801 * r381802;
        double r381804 = r381800 - r381803;
        double r381805 = r381791 + r381804;
        double r381806 = 15.234687407;
        double r381807 = r381784 + r381806;
        double r381808 = r381807 * r381784;
        double r381809 = 31.4690115749;
        double r381810 = r381808 + r381809;
        double r381811 = r381810 * r381784;
        double r381812 = 11.9400905721;
        double r381813 = r381811 + r381812;
        double r381814 = r381813 * r381784;
        double r381815 = 0.607771387771;
        double r381816 = r381814 + r381815;
        double r381817 = r381784 * r381792;
        double r381818 = 11.1667541262;
        double r381819 = r381817 + r381818;
        double r381820 = r381819 * r381784;
        double r381821 = r381820 + r381795;
        double r381822 = r381821 * r381784;
        double r381823 = a;
        double r381824 = r381822 + r381823;
        double r381825 = r381824 * r381784;
        double r381826 = b;
        double r381827 = r381825 + r381826;
        double r381828 = r381816 / r381827;
        double r381829 = r381793 / r381828;
        double r381830 = r381791 + r381829;
        double r381831 = r381790 ? r381805 : r381830;
        return r381831;
}

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.6
Target1.1
Herbie4.7
\[\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 < -6.503113121711622e+54 or 8.94259710639458e+37 < z

    1. Initial program 60.8

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

      \[\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 -6.503113121711622e+54 < z < 8.94259710639458e+37

    1. Initial program 2.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -6.50311312171162177 \cdot 10^{54} \lor \neg \left(z \le 8.9425971063945801 \cdot 10^{37}\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 2020027 
(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))))