\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 -4.56357796438428046 \cdot 10^{-228} \lor \neg \left(b \le 1.2486298280538037 \cdot 10^{-238}\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{\sqrt[3]{1} \cdot \sqrt[3]{1}}{\sqrt{a}}\right)}^{1}}{e^{\log \left(\frac{1}{a}\right) \cdot t + b}} \cdot \frac{\frac{{\left(\frac{\sqrt[3]{1}}{\sqrt{a}}\right)}^{1}}{{\left(\frac{1}{z}\right)}^{y}}}{y}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r551294 = x;
double r551295 = y;
double r551296 = z;
double r551297 = log(r551296);
double r551298 = r551295 * r551297;
double r551299 = t;
double r551300 = 1.0;
double r551301 = r551299 - r551300;
double r551302 = a;
double r551303 = log(r551302);
double r551304 = r551301 * r551303;
double r551305 = r551298 + r551304;
double r551306 = b;
double r551307 = r551305 - r551306;
double r551308 = exp(r551307);
double r551309 = r551294 * r551308;
double r551310 = r551309 / r551295;
return r551310;
}
double f(double x, double y, double z, double t, double a, double b) {
double r551311 = b;
double r551312 = -4.5635779643842805e-228;
bool r551313 = r551311 <= r551312;
double r551314 = 1.2486298280538037e-238;
bool r551315 = r551311 <= r551314;
double r551316 = !r551315;
bool r551317 = r551313 || r551316;
double r551318 = x;
double r551319 = 1.0;
double r551320 = a;
double r551321 = r551319 / r551320;
double r551322 = 1.0;
double r551323 = pow(r551321, r551322);
double r551324 = y;
double r551325 = z;
double r551326 = r551319 / r551325;
double r551327 = log(r551326);
double r551328 = r551324 * r551327;
double r551329 = log(r551321);
double r551330 = t;
double r551331 = r551329 * r551330;
double r551332 = r551331 + r551311;
double r551333 = r551328 + r551332;
double r551334 = exp(r551333);
double r551335 = r551323 / r551334;
double r551336 = r551318 * r551335;
double r551337 = r551336 / r551324;
double r551338 = cbrt(r551319);
double r551339 = r551338 * r551338;
double r551340 = sqrt(r551320);
double r551341 = r551339 / r551340;
double r551342 = pow(r551341, r551322);
double r551343 = exp(r551332);
double r551344 = r551342 / r551343;
double r551345 = r551338 / r551340;
double r551346 = pow(r551345, r551322);
double r551347 = pow(r551326, r551324);
double r551348 = r551346 / r551347;
double r551349 = r551348 / r551324;
double r551350 = r551344 * r551349;
double r551351 = r551318 * r551350;
double r551352 = r551317 ? r551337 : r551351;
return r551352;
}




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 < -4.5635779643842805e-228 or 1.2486298280538037e-238 < b Initial program 1.7
Taylor expanded around inf 1.7
Simplified1.1
if -4.5635779643842805e-228 < b < 1.2486298280538037e-238Initial program 3.8
Taylor expanded around inf 3.8
Simplified2.5
rmApplied *-un-lft-identity2.5
Applied times-frac2.8
Simplified2.8
Simplified9.8
rmApplied *-un-lft-identity9.8
Applied add-sqr-sqrt9.8
Applied add-cube-cbrt9.8
Applied times-frac9.9
Applied unpow-prod-down9.9
Applied times-frac9.9
Applied times-frac11.5
Simplified11.5
Final simplification2.4
herbie shell --seed 2020027
(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))