\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\begin{array}{l}
\mathbf{if}\;b \le -0.01453486137960070465058315392070653615519 \lor \neg \left(b \le -1.935658811926314331032579532956646040497 \cdot 10^{-77}\right):\\
\;\;\;\;\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{{a}^{\left(t - 1\right)} \cdot {z}^{y}}{y \cdot e^{b}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r309054 = x;
double r309055 = y;
double r309056 = z;
double r309057 = log(r309056);
double r309058 = r309055 * r309057;
double r309059 = t;
double r309060 = 1.0;
double r309061 = r309059 - r309060;
double r309062 = a;
double r309063 = log(r309062);
double r309064 = r309061 * r309063;
double r309065 = r309058 + r309064;
double r309066 = b;
double r309067 = r309065 - r309066;
double r309068 = exp(r309067);
double r309069 = r309054 * r309068;
double r309070 = r309069 / r309055;
return r309070;
}
double f(double x, double y, double z, double t, double a, double b) {
double r309071 = b;
double r309072 = -0.014534861379600705;
bool r309073 = r309071 <= r309072;
double r309074 = -1.9356588119263143e-77;
bool r309075 = r309071 <= r309074;
double r309076 = !r309075;
bool r309077 = r309073 || r309076;
double r309078 = x;
double r309079 = y;
double r309080 = z;
double r309081 = log(r309080);
double r309082 = r309079 * r309081;
double r309083 = t;
double r309084 = 1.0;
double r309085 = r309083 - r309084;
double r309086 = a;
double r309087 = log(r309086);
double r309088 = r309085 * r309087;
double r309089 = r309082 + r309088;
double r309090 = r309089 - r309071;
double r309091 = exp(r309090);
double r309092 = r309078 * r309091;
double r309093 = r309092 / r309079;
double r309094 = pow(r309086, r309085);
double r309095 = pow(r309080, r309079);
double r309096 = r309094 * r309095;
double r309097 = exp(r309071);
double r309098 = r309079 * r309097;
double r309099 = r309096 / r309098;
double r309100 = r309078 * r309099;
double r309101 = r309077 ? r309093 : r309100;
return r309101;
}




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
| Original | 2.0 |
|---|---|
| Target | 11.2 |
| Herbie | 2.4 |
if b < -0.014534861379600705 or -1.9356588119263143e-77 < b Initial program 1.8
if -0.014534861379600705 < b < -1.9356588119263143e-77Initial program 4.6
rmApplied associate-/l*3.3
Simplified11.1
rmApplied div-inv11.1
Simplified11.1
Final simplification2.4
herbie shell --seed 2019323
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaWorker from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(if (< t -0.8845848504127471) (/ (* x (/ (pow a (- t 1)) y)) (- (+ b 1) (* y (log z)))) (if (< t 852031.2288374073) (/ (* (/ x y) (pow a (- t 1))) (exp (- b (* (log z) y)))) (/ (* x (/ (pow a (- t 1)) y)) (- (+ b 1) (* y (log z))))))
(/ (* x (exp (- (+ (* y (log z)) (* (- t 1) (log a))) b))) y))