Average Error: 29.4 → 4.9
Time: 12.0s
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 r145634 = x;
        double r145635 = y;
        double r145636 = z;
        double r145637 = 3.13060547623;
        double r145638 = r145636 * r145637;
        double r145639 = 11.1667541262;
        double r145640 = r145638 + r145639;
        double r145641 = r145640 * r145636;
        double r145642 = t;
        double r145643 = r145641 + r145642;
        double r145644 = r145643 * r145636;
        double r145645 = a;
        double r145646 = r145644 + r145645;
        double r145647 = r145646 * r145636;
        double r145648 = b;
        double r145649 = r145647 + r145648;
        double r145650 = r145635 * r145649;
        double r145651 = 15.234687407;
        double r145652 = r145636 + r145651;
        double r145653 = r145652 * r145636;
        double r145654 = 31.4690115749;
        double r145655 = r145653 + r145654;
        double r145656 = r145655 * r145636;
        double r145657 = 11.9400905721;
        double r145658 = r145656 + r145657;
        double r145659 = r145658 * r145636;
        double r145660 = 0.607771387771;
        double r145661 = r145659 + r145660;
        double r145662 = r145650 / r145661;
        double r145663 = r145634 + r145662;
        return r145663;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r145664 = z;
        double r145665 = -4.4164831959839386e+17;
        bool r145666 = r145664 <= r145665;
        double r145667 = 706881567136002.4;
        bool r145668 = r145664 <= r145667;
        double r145669 = !r145668;
        bool r145670 = r145666 || r145669;
        double r145671 = x;
        double r145672 = 3.13060547623;
        double r145673 = y;
        double r145674 = r145672 * r145673;
        double r145675 = t;
        double r145676 = r145675 * r145673;
        double r145677 = 2.0;
        double r145678 = pow(r145664, r145677);
        double r145679 = r145676 / r145678;
        double r145680 = r145674 + r145679;
        double r145681 = 36.527041698806414;
        double r145682 = r145673 / r145664;
        double r145683 = r145681 * r145682;
        double r145684 = r145680 - r145683;
        double r145685 = r145671 + r145684;
        double r145686 = 15.234687407;
        double r145687 = r145664 + r145686;
        double r145688 = r145687 * r145664;
        double r145689 = 31.4690115749;
        double r145690 = r145688 + r145689;
        double r145691 = r145690 * r145664;
        double r145692 = 11.9400905721;
        double r145693 = r145691 + r145692;
        double r145694 = r145693 * r145664;
        double r145695 = 0.607771387771;
        double r145696 = r145694 + r145695;
        double r145697 = r145664 * r145672;
        double r145698 = 11.1667541262;
        double r145699 = r145697 + r145698;
        double r145700 = r145699 * r145664;
        double r145701 = r145700 + r145675;
        double r145702 = r145701 * r145664;
        double r145703 = a;
        double r145704 = r145702 + r145703;
        double r145705 = r145704 * r145664;
        double r145706 = b;
        double r145707 = r145705 + r145706;
        double r145708 = r145696 / r145707;
        double r145709 = r145673 / r145708;
        double r145710 = r145671 + r145709;
        double r145711 = r145670 ? r145685 : r145710;
        return r145711;
}

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