\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\begin{array}{l}
\mathbf{if}\;x \le -3.87699396231292923 \cdot 10^{-107}:\\
\;\;\;\;\frac{x \cdot \frac{{a}^{\left(-1\right)}}{e^{\mathsf{fma}\left(y, -\log z, \mathsf{fma}\left(-t, \log a, b\right)\right)}}}{y}\\
\mathbf{elif}\;x \le 5.6413362742687982 \cdot 10^{-108}:\\
\;\;\;\;\frac{x}{\sqrt[3]{y} \cdot \sqrt[3]{y}} \cdot \frac{\frac{{a}^{\left(-1\right)}}{e^{b - \mathsf{fma}\left(\log z, y, \log a \cdot t\right)}}}{\sqrt[3]{y}}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{x}{\sqrt{e^{b - \mathsf{fma}\left(\log z, y, \log a \cdot t\right)}}} \cdot \frac{{a}^{\left(-1\right)}}{\sqrt{e^{\mathsf{fma}\left(y, -\log z, \mathsf{fma}\left(-t, \log a, b\right)\right)}}}\right) \cdot \frac{1}{y}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r319675 = x;
double r319676 = y;
double r319677 = z;
double r319678 = log(r319677);
double r319679 = r319676 * r319678;
double r319680 = t;
double r319681 = 1.0;
double r319682 = r319680 - r319681;
double r319683 = a;
double r319684 = log(r319683);
double r319685 = r319682 * r319684;
double r319686 = r319679 + r319685;
double r319687 = b;
double r319688 = r319686 - r319687;
double r319689 = exp(r319688);
double r319690 = r319675 * r319689;
double r319691 = r319690 / r319676;
return r319691;
}
double f(double x, double y, double z, double t, double a, double b) {
double r319692 = x;
double r319693 = -3.876993962312929e-107;
bool r319694 = r319692 <= r319693;
double r319695 = a;
double r319696 = 1.0;
double r319697 = -r319696;
double r319698 = pow(r319695, r319697);
double r319699 = y;
double r319700 = z;
double r319701 = log(r319700);
double r319702 = -r319701;
double r319703 = t;
double r319704 = -r319703;
double r319705 = log(r319695);
double r319706 = b;
double r319707 = fma(r319704, r319705, r319706);
double r319708 = fma(r319699, r319702, r319707);
double r319709 = exp(r319708);
double r319710 = r319698 / r319709;
double r319711 = r319692 * r319710;
double r319712 = r319711 / r319699;
double r319713 = 5.641336274268798e-108;
bool r319714 = r319692 <= r319713;
double r319715 = cbrt(r319699);
double r319716 = r319715 * r319715;
double r319717 = r319692 / r319716;
double r319718 = r319705 * r319703;
double r319719 = fma(r319701, r319699, r319718);
double r319720 = r319706 - r319719;
double r319721 = exp(r319720);
double r319722 = r319698 / r319721;
double r319723 = r319722 / r319715;
double r319724 = r319717 * r319723;
double r319725 = sqrt(r319721);
double r319726 = r319692 / r319725;
double r319727 = sqrt(r319709);
double r319728 = r319698 / r319727;
double r319729 = r319726 * r319728;
double r319730 = 1.0;
double r319731 = r319730 / r319699;
double r319732 = r319729 * r319731;
double r319733 = r319714 ? r319724 : r319732;
double r319734 = r319694 ? r319712 : r319733;
return r319734;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 1.9 |
|---|---|
| Target | 11.1 |
| Herbie | 0.6 |
if x < -3.876993962312929e-107Initial program 1.0
Taylor expanded around inf 1.0
Simplified0.3
Taylor expanded around 0 0.3
Simplified0.3
if -3.876993962312929e-107 < x < 5.641336274268798e-108Initial program 3.3
Taylor expanded around inf 3.3
Simplified2.6
Taylor expanded around 0 2.6
Simplified2.6
rmApplied add-cube-cbrt2.8
Applied times-frac1.1
Simplified1.1
if 5.641336274268798e-108 < x Initial program 1.1
Taylor expanded around inf 1.2
Simplified0.3
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-sqr-sqrt0.3
Applied *-un-lft-identity0.3
Applied unpow-prod-down0.3
Applied times-frac0.3
Applied associate-*r*0.3
Simplified0.3
rmApplied div-inv0.3
Final simplification0.6
herbie shell --seed 2019198 +o rules:numerics
(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))