(FPCore (x y z t a b c i) :precision binary64 (/ (+ (* (+ (* (+ (* (+ (* x y) z) y) 27464.7644705) y) 230661.510616) y) t) (+ (* (+ (* (+ (* (+ y a) y) b) y) c) y) i)))
(FPCore (x y z t a b c i)
:precision binary64
(let* ((t_1 (fma y (fma y (+ y a) b) c))
(t_2 (fma y t_1 i))
(t_3 (/ t t_2))
(t_4 (+ (/ z y) (- x (* x (/ a y))))))
(if (<= y -2.6e+84)
t_4
(if (<= y -9.2e+17)
(+
t_3
(+
(* x (* (pow y 3.0) (/ 1.0 t_1)))
(+
(/ y (/ t_2 (fma y 27464.7644705 230661.510616)))
(/ (pow y 3.0) (/ t_2 z)))))
(if (<= y 1.45e+39)
(+
t_3
(+
(* y (/ (fma y (fma x (* y y) 27464.7644705) 230661.510616) t_2))
(/ (* z (pow y 3.0)) t_2)))
(if (<= y 2.4e+72)
(+
(/ (/ t y) t_1)
(+
(* x (/ (pow y 4.0) t_2))
(/ y (/ t_2 (fma y (fma y z 27464.7644705) 230661.510616)))))
t_4))))))double code(double x, double y, double z, double t, double a, double b, double c, double i) {
return ((((((((x * y) + z) * y) + 27464.7644705) * y) + 230661.510616) * y) + t) / (((((((y + a) * y) + b) * y) + c) * y) + i);
}
double code(double x, double y, double z, double t, double a, double b, double c, double i) {
double t_1 = fma(y, fma(y, (y + a), b), c);
double t_2 = fma(y, t_1, i);
double t_3 = t / t_2;
double t_4 = (z / y) + (x - (x * (a / y)));
double tmp;
if (y <= -2.6e+84) {
tmp = t_4;
} else if (y <= -9.2e+17) {
tmp = t_3 + ((x * (pow(y, 3.0) * (1.0 / t_1))) + ((y / (t_2 / fma(y, 27464.7644705, 230661.510616))) + (pow(y, 3.0) / (t_2 / z))));
} else if (y <= 1.45e+39) {
tmp = t_3 + ((y * (fma(y, fma(x, (y * y), 27464.7644705), 230661.510616) / t_2)) + ((z * pow(y, 3.0)) / t_2));
} else if (y <= 2.4e+72) {
tmp = ((t / y) / t_1) + ((x * (pow(y, 4.0) / t_2)) + (y / (t_2 / fma(y, fma(y, z, 27464.7644705), 230661.510616))));
} else {
tmp = t_4;
}
return tmp;
}
function code(x, y, z, t, a, b, c, i) return Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(x * y) + z) * y) + 27464.7644705) * y) + 230661.510616) * y) + t) / Float64(Float64(Float64(Float64(Float64(Float64(Float64(y + a) * y) + b) * y) + c) * y) + i)) end
function code(x, y, z, t, a, b, c, i) t_1 = fma(y, fma(y, Float64(y + a), b), c) t_2 = fma(y, t_1, i) t_3 = Float64(t / t_2) t_4 = Float64(Float64(z / y) + Float64(x - Float64(x * Float64(a / y)))) tmp = 0.0 if (y <= -2.6e+84) tmp = t_4; elseif (y <= -9.2e+17) tmp = Float64(t_3 + Float64(Float64(x * Float64((y ^ 3.0) * Float64(1.0 / t_1))) + Float64(Float64(y / Float64(t_2 / fma(y, 27464.7644705, 230661.510616))) + Float64((y ^ 3.0) / Float64(t_2 / z))))); elseif (y <= 1.45e+39) tmp = Float64(t_3 + Float64(Float64(y * Float64(fma(y, fma(x, Float64(y * y), 27464.7644705), 230661.510616) / t_2)) + Float64(Float64(z * (y ^ 3.0)) / t_2))); elseif (y <= 2.4e+72) tmp = Float64(Float64(Float64(t / y) / t_1) + Float64(Float64(x * Float64((y ^ 4.0) / t_2)) + Float64(y / Float64(t_2 / fma(y, fma(y, z, 27464.7644705), 230661.510616))))); else tmp = t_4; end return tmp end
code[x_, y_, z_, t_, a_, b_, c_, i_] := N[(N[(N[(N[(N[(N[(N[(N[(N[(x * y), $MachinePrecision] + z), $MachinePrecision] * y), $MachinePrecision] + 27464.7644705), $MachinePrecision] * y), $MachinePrecision] + 230661.510616), $MachinePrecision] * y), $MachinePrecision] + t), $MachinePrecision] / N[(N[(N[(N[(N[(N[(N[(y + a), $MachinePrecision] * y), $MachinePrecision] + b), $MachinePrecision] * y), $MachinePrecision] + c), $MachinePrecision] * y), $MachinePrecision] + i), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_, b_, c_, i_] := Block[{t$95$1 = N[(y * N[(y * N[(y + a), $MachinePrecision] + b), $MachinePrecision] + c), $MachinePrecision]}, Block[{t$95$2 = N[(y * t$95$1 + i), $MachinePrecision]}, Block[{t$95$3 = N[(t / t$95$2), $MachinePrecision]}, Block[{t$95$4 = N[(N[(z / y), $MachinePrecision] + N[(x - N[(x * N[(a / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y, -2.6e+84], t$95$4, If[LessEqual[y, -9.2e+17], N[(t$95$3 + N[(N[(x * N[(N[Power[y, 3.0], $MachinePrecision] * N[(1.0 / t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(y / N[(t$95$2 / N[(y * 27464.7644705 + 230661.510616), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[Power[y, 3.0], $MachinePrecision] / N[(t$95$2 / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y, 1.45e+39], N[(t$95$3 + N[(N[(y * N[(N[(y * N[(x * N[(y * y), $MachinePrecision] + 27464.7644705), $MachinePrecision] + 230661.510616), $MachinePrecision] / t$95$2), $MachinePrecision]), $MachinePrecision] + N[(N[(z * N[Power[y, 3.0], $MachinePrecision]), $MachinePrecision] / t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y, 2.4e+72], N[(N[(N[(t / y), $MachinePrecision] / t$95$1), $MachinePrecision] + N[(N[(x * N[(N[Power[y, 4.0], $MachinePrecision] / t$95$2), $MachinePrecision]), $MachinePrecision] + N[(y / N[(t$95$2 / N[(y * N[(y * z + 27464.7644705), $MachinePrecision] + 230661.510616), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$4]]]]]]]]
\frac{\left(\left(\left(x \cdot y + z\right) \cdot y + 27464.7644705\right) \cdot y + 230661.510616\right) \cdot y + t}{\left(\left(\left(y + a\right) \cdot y + b\right) \cdot y + c\right) \cdot y + i}
\begin{array}{l}
t_1 := \mathsf{fma}\left(y, \mathsf{fma}\left(y, y + a, b\right), c\right)\\
t_2 := \mathsf{fma}\left(y, t_1, i\right)\\
t_3 := \frac{t}{t_2}\\
t_4 := \frac{z}{y} + \left(x - x \cdot \frac{a}{y}\right)\\
\mathbf{if}\;y \leq -2.6 \cdot 10^{+84}:\\
\;\;\;\;t_4\\
\mathbf{elif}\;y \leq -9.2 \cdot 10^{+17}:\\
\;\;\;\;t_3 + \left(x \cdot \left({y}^{3} \cdot \frac{1}{t_1}\right) + \left(\frac{y}{\frac{t_2}{\mathsf{fma}\left(y, 27464.7644705, 230661.510616\right)}} + \frac{{y}^{3}}{\frac{t_2}{z}}\right)\right)\\
\mathbf{elif}\;y \leq 1.45 \cdot 10^{+39}:\\
\;\;\;\;t_3 + \left(y \cdot \frac{\mathsf{fma}\left(y, \mathsf{fma}\left(x, y \cdot y, 27464.7644705\right), 230661.510616\right)}{t_2} + \frac{z \cdot {y}^{3}}{t_2}\right)\\
\mathbf{elif}\;y \leq 2.4 \cdot 10^{+72}:\\
\;\;\;\;\frac{\frac{t}{y}}{t_1} + \left(x \cdot \frac{{y}^{4}}{t_2} + \frac{y}{\frac{t_2}{\mathsf{fma}\left(y, \mathsf{fma}\left(y, z, 27464.7644705\right), 230661.510616\right)}}\right)\\
\mathbf{else}:\\
\;\;\;\;t_4\\
\end{array}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus t



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus i
if y < -2.6000000000000001e84 or 2.4000000000000001e72 < y Initial program 63.6
Taylor expanded in y around inf 19.1
Simplified15.1
if -2.6000000000000001e84 < y < -9.2e17Initial program 42.0
Taylor expanded in x around 0 42.1
Simplified33.3
Taylor expanded in i around 0 28.8
Simplified28.8
Applied egg-rr28.8
Taylor expanded in z around 0 31.6
Simplified22.5
if -9.2e17 < y < 1.45000000000000015e39Initial program 1.7
Taylor expanded in z around 0 1.8
Simplified1.8
if 1.45000000000000015e39 < y < 2.4000000000000001e72Initial program 46.9
Taylor expanded in x around 0 46.9
Simplified33.7
Taylor expanded in i around 0 34.2
Simplified33.3
Final simplification8.9
herbie shell --seed 2022170
(FPCore (x y z t a b c i)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2"
:precision binary64
(/ (+ (* (+ (* (+ (* (+ (* x y) z) y) 27464.7644705) y) 230661.510616) y) t) (+ (* (+ (* (+ (* (+ y a) y) b) y) c) y) i)))