\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\begin{array}{l}
\mathbf{if}\;y \le -1.8083024609859045665823801975839258441 \cdot 10^{-147} \lor \neg \left(y \le 3.644923159639203359098206726180046552643 \cdot 10^{-51}\right):\\
\;\;\;\;\frac{x \cdot \frac{{\left(\frac{1}{a}\right)}^{1}}{e^{y \cdot \log \left(\frac{1}{z}\right) + \left(\log \left(\frac{1}{a}\right) \cdot t + b\right)}}}{y}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(\frac{{\left(\frac{1}{a}\right)}^{1}}{e^{\log \left(\frac{1}{a}\right) \cdot t + b} \cdot {\left(\frac{1}{z}\right)}^{y}} \cdot \frac{1}{y}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r460725 = x;
double r460726 = y;
double r460727 = z;
double r460728 = log(r460727);
double r460729 = r460726 * r460728;
double r460730 = t;
double r460731 = 1.0;
double r460732 = r460730 - r460731;
double r460733 = a;
double r460734 = log(r460733);
double r460735 = r460732 * r460734;
double r460736 = r460729 + r460735;
double r460737 = b;
double r460738 = r460736 - r460737;
double r460739 = exp(r460738);
double r460740 = r460725 * r460739;
double r460741 = r460740 / r460726;
return r460741;
}
double f(double x, double y, double z, double t, double a, double b) {
double r460742 = y;
double r460743 = -1.8083024609859046e-147;
bool r460744 = r460742 <= r460743;
double r460745 = 3.6449231596392034e-51;
bool r460746 = r460742 <= r460745;
double r460747 = !r460746;
bool r460748 = r460744 || r460747;
double r460749 = x;
double r460750 = 1.0;
double r460751 = a;
double r460752 = r460750 / r460751;
double r460753 = 1.0;
double r460754 = pow(r460752, r460753);
double r460755 = z;
double r460756 = r460750 / r460755;
double r460757 = log(r460756);
double r460758 = r460742 * r460757;
double r460759 = log(r460752);
double r460760 = t;
double r460761 = r460759 * r460760;
double r460762 = b;
double r460763 = r460761 + r460762;
double r460764 = r460758 + r460763;
double r460765 = exp(r460764);
double r460766 = r460754 / r460765;
double r460767 = r460749 * r460766;
double r460768 = r460767 / r460742;
double r460769 = exp(r460763);
double r460770 = pow(r460756, r460742);
double r460771 = r460769 * r460770;
double r460772 = r460754 / r460771;
double r460773 = r460750 / r460742;
double r460774 = r460772 * r460773;
double r460775 = r460749 * r460774;
double r460776 = r460748 ? r460768 : r460775;
return r460776;
}




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 | 1.9 |
|---|---|
| Target | 10.8 |
| Herbie | 1.4 |
if y < -1.8083024609859046e-147 or 3.6449231596392034e-51 < y Initial program 0.7
Taylor expanded around inf 0.7
Simplified0.3
if -1.8083024609859046e-147 < y < 3.6449231596392034e-51Initial program 4.1
Taylor expanded around inf 4.1
Simplified2.8
rmApplied *-un-lft-identity2.8
Applied times-frac3.2
Simplified3.2
Simplified3.2
rmApplied div-inv3.3
Final simplification1.4
herbie shell --seed 2019354
(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))