Average Error: 29.9 → 0.3
Time: 21.0s
Precision: binary64
\[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771} \]
\[\begin{array}{l} t_1 := 0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)\\ \mathbf{if}\;z \leq -6.561900238294925 \cdot 10^{+57}:\\ \;\;\;\;\mathsf{fma}\left(y, \left(3.13060547623 + \left(\frac{457.9610022158428}{z \cdot z} + \left(\frac{a}{{z}^{3}} + \frac{t}{z \cdot z}\right)\right)\right) - \left(\frac{36.52704169880642}{z} + \mathsf{fma}\left(15.234687407, \frac{t}{{z}^{3}}, \frac{5864.8025282699045}{{z}^{3}}\right)\right), x\right)\\ \mathbf{elif}\;z \leq 1.5903767345779396 \cdot 10^{+71}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{b}{t_1} + \left(\left(z \cdot z\right) \cdot \frac{t}{t_1} + \mathsf{fma}\left(11.1667541262, \frac{{z}^{3}}{t_1}, \mathsf{fma}\left(3.13060547623, \frac{{z}^{4}}{t_1}, z \cdot \frac{a}{t_1}\right)\right)\right), x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(3.13060547623, y, \mathsf{fma}\left(457.9610022158428, \frac{y}{z \cdot z}, x\right)\right) + \frac{y}{z} \cdot \left(\frac{t}{z} + -36.52704169880642\right)\\ \end{array} \]
(FPCore (x y z t a b)
 :precision binary64
 (+
  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))))
(FPCore (x y z t a b)
 :precision binary64
 (let* ((t_1
         (+
          0.607771387771
          (+
           (* (pow z 3.0) (+ z 15.234687407))
           (* z (fma z 31.4690115749 11.9400905721))))))
   (if (<= z -6.561900238294925e+57)
     (fma
      y
      (-
       (+
        3.13060547623
        (+ (/ 457.9610022158428 (* z z)) (+ (/ a (pow z 3.0)) (/ t (* z z)))))
       (+
        (/ 36.52704169880642 z)
        (fma
         15.234687407
         (/ t (pow z 3.0))
         (/ 5864.8025282699045 (pow z 3.0)))))
      x)
     (if (<= z 1.5903767345779396e+71)
       (fma
        y
        (+
         (/ b t_1)
         (+
          (* (* z z) (/ t t_1))
          (fma
           11.1667541262
           (/ (pow z 3.0) t_1)
           (fma 3.13060547623 (/ (pow z 4.0) t_1) (* z (/ a t_1))))))
        x)
       (+
        (fma 3.13060547623 y (fma 457.9610022158428 (/ y (* z z)) x))
        (* (/ y z) (+ (/ t z) -36.52704169880642)))))))
double code(double x, double y, double z, double t, double a, double b) {
	return 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));
}
double code(double x, double y, double z, double t, double a, double b) {
	double t_1 = 0.607771387771 + ((pow(z, 3.0) * (z + 15.234687407)) + (z * fma(z, 31.4690115749, 11.9400905721)));
	double tmp;
	if (z <= -6.561900238294925e+57) {
		tmp = fma(y, ((3.13060547623 + ((457.9610022158428 / (z * z)) + ((a / pow(z, 3.0)) + (t / (z * z))))) - ((36.52704169880642 / z) + fma(15.234687407, (t / pow(z, 3.0)), (5864.8025282699045 / pow(z, 3.0))))), x);
	} else if (z <= 1.5903767345779396e+71) {
		tmp = fma(y, ((b / t_1) + (((z * z) * (t / t_1)) + fma(11.1667541262, (pow(z, 3.0) / t_1), fma(3.13060547623, (pow(z, 4.0) / t_1), (z * (a / t_1)))))), x);
	} else {
		tmp = fma(3.13060547623, y, fma(457.9610022158428, (y / (z * z)), x)) + ((y / z) * ((t / z) + -36.52704169880642));
	}
	return tmp;
}
function code(x, y, z, t, a, b)
	return Float64(x + Float64(Float64(y * Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(z * 3.13060547623) + 11.1667541262) * z) + t) * z) + a) * z) + b)) / Float64(Float64(Float64(Float64(Float64(Float64(Float64(z + 15.234687407) * z) + 31.4690115749) * z) + 11.9400905721) * z) + 0.607771387771)))
end
function code(x, y, z, t, a, b)
	t_1 = Float64(0.607771387771 + Float64(Float64((z ^ 3.0) * Float64(z + 15.234687407)) + Float64(z * fma(z, 31.4690115749, 11.9400905721))))
	tmp = 0.0
	if (z <= -6.561900238294925e+57)
		tmp = fma(y, Float64(Float64(3.13060547623 + Float64(Float64(457.9610022158428 / Float64(z * z)) + Float64(Float64(a / (z ^ 3.0)) + Float64(t / Float64(z * z))))) - Float64(Float64(36.52704169880642 / z) + fma(15.234687407, Float64(t / (z ^ 3.0)), Float64(5864.8025282699045 / (z ^ 3.0))))), x);
	elseif (z <= 1.5903767345779396e+71)
		tmp = fma(y, Float64(Float64(b / t_1) + Float64(Float64(Float64(z * z) * Float64(t / t_1)) + fma(11.1667541262, Float64((z ^ 3.0) / t_1), fma(3.13060547623, Float64((z ^ 4.0) / t_1), Float64(z * Float64(a / t_1)))))), x);
	else
		tmp = Float64(fma(3.13060547623, y, fma(457.9610022158428, Float64(y / Float64(z * z)), x)) + Float64(Float64(y / z) * Float64(Float64(t / z) + -36.52704169880642)));
	end
	return tmp
end
code[x_, y_, z_, t_, a_, b_] := N[(x + N[(N[(y * N[(N[(N[(N[(N[(N[(N[(N[(z * 3.13060547623), $MachinePrecision] + 11.1667541262), $MachinePrecision] * z), $MachinePrecision] + t), $MachinePrecision] * z), $MachinePrecision] + a), $MachinePrecision] * z), $MachinePrecision] + b), $MachinePrecision]), $MachinePrecision] / N[(N[(N[(N[(N[(N[(N[(z + 15.234687407), $MachinePrecision] * z), $MachinePrecision] + 31.4690115749), $MachinePrecision] * z), $MachinePrecision] + 11.9400905721), $MachinePrecision] * z), $MachinePrecision] + 0.607771387771), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_, b_] := Block[{t$95$1 = N[(0.607771387771 + N[(N[(N[Power[z, 3.0], $MachinePrecision] * N[(z + 15.234687407), $MachinePrecision]), $MachinePrecision] + N[(z * N[(z * 31.4690115749 + 11.9400905721), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[z, -6.561900238294925e+57], N[(y * N[(N[(3.13060547623 + N[(N[(457.9610022158428 / N[(z * z), $MachinePrecision]), $MachinePrecision] + N[(N[(a / N[Power[z, 3.0], $MachinePrecision]), $MachinePrecision] + N[(t / N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[(36.52704169880642 / z), $MachinePrecision] + N[(15.234687407 * N[(t / N[Power[z, 3.0], $MachinePrecision]), $MachinePrecision] + N[(5864.8025282699045 / N[Power[z, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + x), $MachinePrecision], If[LessEqual[z, 1.5903767345779396e+71], N[(y * N[(N[(b / t$95$1), $MachinePrecision] + N[(N[(N[(z * z), $MachinePrecision] * N[(t / t$95$1), $MachinePrecision]), $MachinePrecision] + N[(11.1667541262 * N[(N[Power[z, 3.0], $MachinePrecision] / t$95$1), $MachinePrecision] + N[(3.13060547623 * N[(N[Power[z, 4.0], $MachinePrecision] / t$95$1), $MachinePrecision] + N[(z * N[(a / t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + x), $MachinePrecision], N[(N[(3.13060547623 * y + N[(457.9610022158428 * N[(y / N[(z * z), $MachinePrecision]), $MachinePrecision] + x), $MachinePrecision]), $MachinePrecision] + N[(N[(y / z), $MachinePrecision] * N[(N[(t / z), $MachinePrecision] + -36.52704169880642), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771}
\begin{array}{l}
t_1 := 0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)\\
\mathbf{if}\;z \leq -6.561900238294925 \cdot 10^{+57}:\\
\;\;\;\;\mathsf{fma}\left(y, \left(3.13060547623 + \left(\frac{457.9610022158428}{z \cdot z} + \left(\frac{a}{{z}^{3}} + \frac{t}{z \cdot z}\right)\right)\right) - \left(\frac{36.52704169880642}{z} + \mathsf{fma}\left(15.234687407, \frac{t}{{z}^{3}}, \frac{5864.8025282699045}{{z}^{3}}\right)\right), x\right)\\

\mathbf{elif}\;z \leq 1.5903767345779396 \cdot 10^{+71}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{b}{t_1} + \left(\left(z \cdot z\right) \cdot \frac{t}{t_1} + \mathsf{fma}\left(11.1667541262, \frac{{z}^{3}}{t_1}, \mathsf{fma}\left(3.13060547623, \frac{{z}^{4}}{t_1}, z \cdot \frac{a}{t_1}\right)\right)\right), x\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(3.13060547623, y, \mathsf{fma}\left(457.9610022158428, \frac{y}{z \cdot z}, x\right)\right) + \frac{y}{z} \cdot \left(\frac{t}{z} + -36.52704169880642\right)\\


\end{array}

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

Target

Original29.9
Target1.1
Herbie0.3
\[\begin{array}{l} \mathbf{if}\;z < -6.499344996252632 \cdot 10^{+53}:\\ \;\;\;\;x + \left(\left(3.13060547623 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \mathbf{elif}\;z < 7.066965436914287 \cdot 10^{+59}:\\ \;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771}{\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\ \mathbf{else}:\\ \;\;\;\;x + \left(\left(3.13060547623 - \frac{36.527041698806414}{z}\right) + \frac{t}{z \cdot z}\right) \cdot \frac{y}{1}\\ \end{array} \]

Derivation

  1. Split input into 3 regimes
  2. if z < -6.56190023829492534e57

    1. Initial program 61.7

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771} \]
    2. Simplified60.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(y, \frac{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 3.13060547623, 11.1667541262\right), t\right), a\right), b\right)}{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, z + 15.234687407, 31.4690115749\right), 11.9400905721\right), 0.607771387771\right)}, x\right)} \]
    3. Taylor expanded in z around inf 0.1

      \[\leadsto \mathsf{fma}\left(y, \color{blue}{\left(3.13060547623 + \left(\frac{t}{{z}^{2}} + \left(457.9610022158428 \cdot \frac{1}{{z}^{2}} + \frac{a}{{z}^{3}}\right)\right)\right) - \left(15.234687407 \cdot \frac{t}{{z}^{3}} + \left(5864.8025282699045 \cdot \frac{1}{{z}^{3}} + 36.52704169880642 \cdot \frac{1}{z}\right)\right)}, x\right) \]
    4. Simplified0.1

      \[\leadsto \mathsf{fma}\left(y, \color{blue}{\left(3.13060547623 + \left(\frac{457.9610022158428}{z \cdot z} + \left(\frac{a}{{z}^{3}} + \frac{t}{z \cdot z}\right)\right)\right) - \left(\frac{36.52704169880642}{z} + \mathsf{fma}\left(15.234687407, \frac{t}{{z}^{3}}, \frac{5864.8025282699045}{{z}^{3}}\right)\right)}, x\right) \]

    if -6.56190023829492534e57 < z < 1.5903767345779396e71

    1. Initial program 4.1

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771} \]
    2. Simplified1.8

      \[\leadsto \color{blue}{\mathsf{fma}\left(y, \frac{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 3.13060547623, 11.1667541262\right), t\right), a\right), b\right)}{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, z + 15.234687407, 31.4690115749\right), 11.9400905721\right), 0.607771387771\right)}, x\right)} \]
    3. Taylor expanded in t around 0 1.9

      \[\leadsto \mathsf{fma}\left(y, \color{blue}{\frac{b}{0.607771387771 + \left(31.4690115749 \cdot {z}^{2} + \left({z}^{4} + \left(15.234687407 \cdot {z}^{3} + 11.9400905721 \cdot z\right)\right)\right)} + \left(\frac{t \cdot {z}^{2}}{0.607771387771 + \left(31.4690115749 \cdot {z}^{2} + \left({z}^{4} + \left(15.234687407 \cdot {z}^{3} + 11.9400905721 \cdot z\right)\right)\right)} + \left(11.1667541262 \cdot \frac{{z}^{3}}{0.607771387771 + \left(31.4690115749 \cdot {z}^{2} + \left({z}^{4} + \left(15.234687407 \cdot {z}^{3} + 11.9400905721 \cdot z\right)\right)\right)} + \left(\frac{a \cdot z}{0.607771387771 + \left(31.4690115749 \cdot {z}^{2} + \left({z}^{4} + \left(15.234687407 \cdot {z}^{3} + 11.9400905721 \cdot z\right)\right)\right)} + 3.13060547623 \cdot \frac{{z}^{4}}{0.607771387771 + \left(31.4690115749 \cdot {z}^{2} + \left({z}^{4} + \left(15.234687407 \cdot {z}^{3} + 11.9400905721 \cdot z\right)\right)\right)}\right)\right)\right)}, x\right) \]
    4. Simplified0.4

      \[\leadsto \mathsf{fma}\left(y, \color{blue}{\frac{b}{0.607771387771 + \left({z}^{3} \cdot \left(15.234687407 + z\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)} + \left(\frac{t}{0.607771387771 + \left({z}^{3} \cdot \left(15.234687407 + z\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)} \cdot \left(z \cdot z\right) + \mathsf{fma}\left(11.1667541262, \frac{{z}^{3}}{0.607771387771 + \left({z}^{3} \cdot \left(15.234687407 + z\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)}, \mathsf{fma}\left(3.13060547623, \frac{{z}^{4}}{0.607771387771 + \left({z}^{3} \cdot \left(15.234687407 + z\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)}, \frac{a}{0.607771387771 + \left({z}^{3} \cdot \left(15.234687407 + z\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)} \cdot z\right)\right)\right)}, x\right) \]

    if 1.5903767345779396e71 < z

    1. Initial program 63.5

      \[x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771} \]
    2. Simplified63.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(y, \frac{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, 3.13060547623, 11.1667541262\right), t\right), a\right), b\right)}{\mathsf{fma}\left(z, \mathsf{fma}\left(z, \mathsf{fma}\left(z, z + 15.234687407, 31.4690115749\right), 11.9400905721\right), 0.607771387771\right)}, x\right)} \]
    3. Taylor expanded in z around inf 8.6

      \[\leadsto \color{blue}{\left(\frac{y \cdot t}{{z}^{2}} + \left(3.13060547623 \cdot y + \left(457.9610022158428 \cdot \frac{y}{{z}^{2}} + x\right)\right)\right) - 36.52704169880642 \cdot \frac{y}{z}} \]
    4. Simplified0.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(3.13060547623, y, \mathsf{fma}\left(457.9610022158428, \frac{y}{z \cdot z}, x\right)\right) + \frac{y}{z} \cdot \left(\frac{t}{z} - 36.52704169880642\right)} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \leq -6.561900238294925 \cdot 10^{+57}:\\ \;\;\;\;\mathsf{fma}\left(y, \left(3.13060547623 + \left(\frac{457.9610022158428}{z \cdot z} + \left(\frac{a}{{z}^{3}} + \frac{t}{z \cdot z}\right)\right)\right) - \left(\frac{36.52704169880642}{z} + \mathsf{fma}\left(15.234687407, \frac{t}{{z}^{3}}, \frac{5864.8025282699045}{{z}^{3}}\right)\right), x\right)\\ \mathbf{elif}\;z \leq 1.5903767345779396 \cdot 10^{+71}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{b}{0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)} + \left(\left(z \cdot z\right) \cdot \frac{t}{0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)} + \mathsf{fma}\left(11.1667541262, \frac{{z}^{3}}{0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)}, \mathsf{fma}\left(3.13060547623, \frac{{z}^{4}}{0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)}, z \cdot \frac{a}{0.607771387771 + \left({z}^{3} \cdot \left(z + 15.234687407\right) + z \cdot \mathsf{fma}\left(z, 31.4690115749, 11.9400905721\right)\right)}\right)\right)\right), x\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(3.13060547623, y, \mathsf{fma}\left(457.9610022158428, \frac{y}{z \cdot z}, x\right)\right) + \frac{y}{z} \cdot \left(\frac{t}{z} + -36.52704169880642\right)\\ \end{array} \]

Reproduce

herbie shell --seed 2022150 
(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.0))) (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.0)))))

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