\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{{z}^{y} \cdot \frac{{a}^{\left(t - 1\right)}}{e^{b}}}{y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r370573 = x;
double r370574 = y;
double r370575 = z;
double r370576 = log(r370575);
double r370577 = r370574 * r370576;
double r370578 = t;
double r370579 = 1.0;
double r370580 = r370578 - r370579;
double r370581 = a;
double r370582 = log(r370581);
double r370583 = r370580 * r370582;
double r370584 = r370577 + r370583;
double r370585 = b;
double r370586 = r370584 - r370585;
double r370587 = exp(r370586);
double r370588 = r370573 * r370587;
double r370589 = r370588 / r370574;
return r370589;
}
double f(double x, double y, double z, double t, double a, double b) {
double r370590 = b;
double r370591 = -0.014534861379600705;
bool r370592 = r370590 <= r370591;
double r370593 = -1.9356588119263143e-77;
bool r370594 = r370590 <= r370593;
double r370595 = !r370594;
bool r370596 = r370592 || r370595;
double r370597 = x;
double r370598 = y;
double r370599 = z;
double r370600 = log(r370599);
double r370601 = r370598 * r370600;
double r370602 = t;
double r370603 = 1.0;
double r370604 = r370602 - r370603;
double r370605 = a;
double r370606 = log(r370605);
double r370607 = r370604 * r370606;
double r370608 = r370601 + r370607;
double r370609 = r370608 - r370590;
double r370610 = exp(r370609);
double r370611 = r370597 * r370610;
double r370612 = r370611 / r370598;
double r370613 = pow(r370599, r370598);
double r370614 = pow(r370605, r370604);
double r370615 = exp(r370590);
double r370616 = r370614 / r370615;
double r370617 = r370613 * r370616;
double r370618 = r370617 / r370598;
double r370619 = r370597 * r370618;
double r370620 = r370596 ? r370612 : r370619;
return r370620;
}




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 *-un-lft-identity4.6
Applied times-frac3.3
Simplified3.3
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))