x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\begin{array}{l}
\mathbf{if}\;y \le -1.436503598316956953340195468626916408539 \lor \neg \left(y \le 8.989039952438387375008659575680983873271 \cdot 10^{120}\right):\\
\;\;\;\;x \cdot e^{a \cdot \log 1 + \left(\log z - t\right) \cdot y}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{{1}^{a}}{e^{\frac{1}{2} \cdot \frac{a \cdot {z}^{2}}{{1}^{2}} + \left(a \cdot b + \left(t \cdot y + 1 \cdot \left(a \cdot z\right)\right)\right)}} \cdot {z}^{y}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r102946 = x;
double r102947 = y;
double r102948 = z;
double r102949 = log(r102948);
double r102950 = t;
double r102951 = r102949 - r102950;
double r102952 = r102947 * r102951;
double r102953 = a;
double r102954 = 1.0;
double r102955 = r102954 - r102948;
double r102956 = log(r102955);
double r102957 = b;
double r102958 = r102956 - r102957;
double r102959 = r102953 * r102958;
double r102960 = r102952 + r102959;
double r102961 = exp(r102960);
double r102962 = r102946 * r102961;
return r102962;
}
double f(double x, double y, double z, double t, double a, double b) {
double r102963 = y;
double r102964 = -1.436503598316957;
bool r102965 = r102963 <= r102964;
double r102966 = 8.989039952438387e+120;
bool r102967 = r102963 <= r102966;
double r102968 = !r102967;
bool r102969 = r102965 || r102968;
double r102970 = x;
double r102971 = a;
double r102972 = 1.0;
double r102973 = log(r102972);
double r102974 = r102971 * r102973;
double r102975 = z;
double r102976 = log(r102975);
double r102977 = t;
double r102978 = r102976 - r102977;
double r102979 = r102978 * r102963;
double r102980 = r102974 + r102979;
double r102981 = exp(r102980);
double r102982 = r102970 * r102981;
double r102983 = pow(r102972, r102971);
double r102984 = 0.5;
double r102985 = 2.0;
double r102986 = pow(r102975, r102985);
double r102987 = r102971 * r102986;
double r102988 = pow(r102972, r102985);
double r102989 = r102987 / r102988;
double r102990 = r102984 * r102989;
double r102991 = b;
double r102992 = r102971 * r102991;
double r102993 = r102977 * r102963;
double r102994 = r102971 * r102975;
double r102995 = r102972 * r102994;
double r102996 = r102993 + r102995;
double r102997 = r102992 + r102996;
double r102998 = r102990 + r102997;
double r102999 = exp(r102998);
double r103000 = r102983 / r102999;
double r103001 = pow(r102975, r102963);
double r103002 = r103000 * r103001;
double r103003 = r102970 * r103002;
double r103004 = r102969 ? r102982 : r103003;
return r103004;
}



Bits error versus x



Bits error versus y



Bits error versus z



Bits error versus t



Bits error versus a



Bits error versus b
Results
if y < -1.436503598316957 or 8.989039952438387e+120 < y Initial program 1.7
Taylor expanded around 0 8.9
Simplified8.6
if -1.436503598316957 < y < 8.989039952438387e+120Initial program 2.4
Taylor expanded around 0 0.1
Taylor expanded around inf 0.1
Simplified0.8
Final simplification3.4
herbie shell --seed 2019325
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaApprox from math-functions-0.1.5.2, B"
:precision binary64
(* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1 z)) b))))))