Average Error: 29.6 → 4.4
Time: 6.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 -3.978483443952488632012241591332400099399 \cdot 10^{48} \lor \neg \left(z \le 8.559962113309013051011544276033877945173 \cdot 10^{55}\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 -3.978483443952488632012241591332400099399 \cdot 10^{48} \lor \neg \left(z \le 8.559962113309013051011544276033877945173 \cdot 10^{55}\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 r396783 = x;
        double r396784 = y;
        double r396785 = z;
        double r396786 = 3.13060547623;
        double r396787 = r396785 * r396786;
        double r396788 = 11.1667541262;
        double r396789 = r396787 + r396788;
        double r396790 = r396789 * r396785;
        double r396791 = t;
        double r396792 = r396790 + r396791;
        double r396793 = r396792 * r396785;
        double r396794 = a;
        double r396795 = r396793 + r396794;
        double r396796 = r396795 * r396785;
        double r396797 = b;
        double r396798 = r396796 + r396797;
        double r396799 = r396784 * r396798;
        double r396800 = 15.234687407;
        double r396801 = r396785 + r396800;
        double r396802 = r396801 * r396785;
        double r396803 = 31.4690115749;
        double r396804 = r396802 + r396803;
        double r396805 = r396804 * r396785;
        double r396806 = 11.9400905721;
        double r396807 = r396805 + r396806;
        double r396808 = r396807 * r396785;
        double r396809 = 0.607771387771;
        double r396810 = r396808 + r396809;
        double r396811 = r396799 / r396810;
        double r396812 = r396783 + r396811;
        return r396812;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r396813 = z;
        double r396814 = -3.9784834439524886e+48;
        bool r396815 = r396813 <= r396814;
        double r396816 = 8.559962113309013e+55;
        bool r396817 = r396813 <= r396816;
        double r396818 = !r396817;
        bool r396819 = r396815 || r396818;
        double r396820 = x;
        double r396821 = 3.13060547623;
        double r396822 = y;
        double r396823 = r396821 * r396822;
        double r396824 = t;
        double r396825 = r396824 * r396822;
        double r396826 = 2.0;
        double r396827 = pow(r396813, r396826);
        double r396828 = r396825 / r396827;
        double r396829 = r396823 + r396828;
        double r396830 = 36.527041698806414;
        double r396831 = r396822 / r396813;
        double r396832 = r396830 * r396831;
        double r396833 = r396829 - r396832;
        double r396834 = r396820 + r396833;
        double r396835 = 15.234687407;
        double r396836 = r396813 + r396835;
        double r396837 = r396836 * r396813;
        double r396838 = 31.4690115749;
        double r396839 = r396837 + r396838;
        double r396840 = r396839 * r396813;
        double r396841 = 11.9400905721;
        double r396842 = r396840 + r396841;
        double r396843 = r396842 * r396813;
        double r396844 = 0.607771387771;
        double r396845 = r396843 + r396844;
        double r396846 = r396813 * r396821;
        double r396847 = 11.1667541262;
        double r396848 = r396846 + r396847;
        double r396849 = r396848 * r396813;
        double r396850 = r396849 + r396824;
        double r396851 = r396850 * r396813;
        double r396852 = a;
        double r396853 = r396851 + r396852;
        double r396854 = r396853 * r396813;
        double r396855 = b;
        double r396856 = r396854 + r396855;
        double r396857 = r396845 / r396856;
        double r396858 = r396822 / r396857;
        double r396859 = r396820 + r396858;
        double r396860 = r396819 ? r396834 : r396859;
        return r396860;
}

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.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 < -3.9784834439524886e+48 or 8.559962113309013e+55 < z

    1. Initial program 61.6

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

      \[\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 -3.9784834439524886e+48 < z < 8.559962113309013e+55

    1. Initial program 2.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. Using strategy rm
    3. Applied associate-/l*1.0

      \[\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 -3.978483443952488632012241591332400099399 \cdot 10^{48} \lor \neg \left(z \le 8.559962113309013051011544276033877945173 \cdot 10^{55}\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 2020001 
(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))))