\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.218811762387359090359297706344973358133 \cdot 10^{-281} \lor \neg \left(y \le 4.216998801399994992491902428717653999299 \cdot 10^{-137}\right):\\
\;\;\;\;{\left(\frac{1}{{a}^{1}}\right)}^{1} \cdot \sqrt[3]{{\left(\frac{e^{\left(t \cdot \log a - b\right) + \log z \cdot y} \cdot x}{y}\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y \cdot \frac{\frac{1}{{z}^{y}}}{\frac{\frac{{a}^{t}}{{a}^{1}}}{e^{b}}}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r378657 = x;
double r378658 = y;
double r378659 = z;
double r378660 = log(r378659);
double r378661 = r378658 * r378660;
double r378662 = t;
double r378663 = 1.0;
double r378664 = r378662 - r378663;
double r378665 = a;
double r378666 = log(r378665);
double r378667 = r378664 * r378666;
double r378668 = r378661 + r378667;
double r378669 = b;
double r378670 = r378668 - r378669;
double r378671 = exp(r378670);
double r378672 = r378657 * r378671;
double r378673 = r378672 / r378658;
return r378673;
}
double f(double x, double y, double z, double t, double a, double b) {
double r378674 = y;
double r378675 = -1.2188117623873591e-281;
bool r378676 = r378674 <= r378675;
double r378677 = 4.216998801399995e-137;
bool r378678 = r378674 <= r378677;
double r378679 = !r378678;
bool r378680 = r378676 || r378679;
double r378681 = 1.0;
double r378682 = a;
double r378683 = 1.0;
double r378684 = pow(r378682, r378683);
double r378685 = r378681 / r378684;
double r378686 = pow(r378685, r378683);
double r378687 = t;
double r378688 = log(r378682);
double r378689 = r378687 * r378688;
double r378690 = b;
double r378691 = r378689 - r378690;
double r378692 = z;
double r378693 = log(r378692);
double r378694 = r378693 * r378674;
double r378695 = r378691 + r378694;
double r378696 = exp(r378695);
double r378697 = x;
double r378698 = r378696 * r378697;
double r378699 = r378698 / r378674;
double r378700 = 3.0;
double r378701 = pow(r378699, r378700);
double r378702 = cbrt(r378701);
double r378703 = r378686 * r378702;
double r378704 = pow(r378692, r378674);
double r378705 = r378681 / r378704;
double r378706 = pow(r378682, r378687);
double r378707 = r378706 / r378684;
double r378708 = exp(r378690);
double r378709 = r378707 / r378708;
double r378710 = r378705 / r378709;
double r378711 = r378674 * r378710;
double r378712 = r378697 / r378711;
double r378713 = r378680 ? r378703 : r378712;
return r378713;
}




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.5 |
| Herbie | 5.8 |
if y < -1.2188117623873591e-281 or 4.216998801399995e-137 < y Initial program 1.6
rmApplied associate-/l*1.4
Simplified20.3
rmApplied pow-sub20.3
Taylor expanded around inf 20.5
Simplified11.3
rmApplied add-cbrt-cube11.3
Applied add-cbrt-cube20.4
Applied add-cbrt-cube35.5
Applied cbrt-undiv36.7
Applied cbrt-unprod36.7
Simplified4.9
if -1.2188117623873591e-281 < y < 4.216998801399995e-137Initial program 4.4
rmApplied associate-/l*4.7
Simplified10.8
rmApplied pow-sub10.7
rmApplied div-inv10.7
Simplified10.7
Final simplification5.8
herbie shell --seed 2019179
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaWorker from math-functions-0.1.5.2, A"
:herbie-target
(if (< t -0.8845848504127471) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z)))) (if (< t 852031.2288374073) (/ (* (/ x y) (pow a (- t 1.0))) (exp (- b (* (log z) y)))) (/ (* x (/ (pow a (- t 1.0)) y)) (- (+ b 1.0) (* y (log z))))))
(/ (* x (exp (- (+ (* y (log z)) (* (- t 1.0) (log a))) b))) y))