\frac{x \cdot e^{\left(y \cdot \log z + \left(t - 1\right) \cdot \log a\right) - b}}{y}\frac{\left(x \cdot \frac{{\left(\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1}\right)}^{1}}{\sqrt{\sqrt{e^{\mathsf{fma}\left(y, \log \left(\frac{1}{z}\right), \mathsf{fma}\left(\log \left(\frac{1}{a}\right), t, b\right)\right)}}} \cdot \sqrt{\sqrt{e^{\mathsf{fma}\left(y, \log \left(\frac{1}{z}\right), \mathsf{fma}\left(\log \left(\frac{1}{a}\right), t, b\right)\right)}}}}\right) \cdot \frac{{\left(\frac{\sqrt[3]{1}}{a}\right)}^{1}}{\sqrt{e^{\mathsf{fma}\left(y, \log \left(\frac{1}{z}\right), \mathsf{fma}\left(\log \left(\frac{1}{a}\right), t, b\right)\right)}}}}{y}double f(double x, double y, double z, double t, double a, double b) {
double r456414 = x;
double r456415 = y;
double r456416 = z;
double r456417 = log(r456416);
double r456418 = r456415 * r456417;
double r456419 = t;
double r456420 = 1.0;
double r456421 = r456419 - r456420;
double r456422 = a;
double r456423 = log(r456422);
double r456424 = r456421 * r456423;
double r456425 = r456418 + r456424;
double r456426 = b;
double r456427 = r456425 - r456426;
double r456428 = exp(r456427);
double r456429 = r456414 * r456428;
double r456430 = r456429 / r456415;
return r456430;
}
double f(double x, double y, double z, double t, double a, double b) {
double r456431 = x;
double r456432 = 1.0;
double r456433 = cbrt(r456432);
double r456434 = r456433 * r456433;
double r456435 = r456434 / r456432;
double r456436 = 1.0;
double r456437 = pow(r456435, r456436);
double r456438 = y;
double r456439 = z;
double r456440 = r456432 / r456439;
double r456441 = log(r456440);
double r456442 = a;
double r456443 = r456432 / r456442;
double r456444 = log(r456443);
double r456445 = t;
double r456446 = b;
double r456447 = fma(r456444, r456445, r456446);
double r456448 = fma(r456438, r456441, r456447);
double r456449 = exp(r456448);
double r456450 = sqrt(r456449);
double r456451 = sqrt(r456450);
double r456452 = r456451 * r456451;
double r456453 = r456437 / r456452;
double r456454 = r456431 * r456453;
double r456455 = r456433 / r456442;
double r456456 = pow(r456455, r456436);
double r456457 = r456456 / r456450;
double r456458 = r456454 * r456457;
double r456459 = r456458 / r456438;
return r456459;
}




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.0 |
| Herbie | 1.2 |
Initial program 1.9
Taylor expanded around inf 2.0
Simplified1.2
rmApplied add-sqr-sqrt1.2
Applied *-un-lft-identity1.2
Applied add-cube-cbrt1.2
Applied times-frac1.2
Applied unpow-prod-down1.2
Applied times-frac1.2
Applied associate-*r*1.2
rmApplied add-sqr-sqrt1.2
Applied sqrt-prod1.2
Final simplification1.2
herbie shell --seed 2020062 +o rules:numerics
(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))