\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(\log \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot x + \left(x \cdot \log \left(\sqrt[3]{y}\right) + z \cdot \left(\log 1 - \left(1 \cdot y + \frac{1}{2} \cdot \frac{{y}^{2}}{{1}^{2}}\right)\right)\right)\right) - tdouble f(double x, double y, double z, double t) {
double r472409 = x;
double r472410 = y;
double r472411 = log(r472410);
double r472412 = r472409 * r472411;
double r472413 = z;
double r472414 = 1.0;
double r472415 = r472414 - r472410;
double r472416 = log(r472415);
double r472417 = r472413 * r472416;
double r472418 = r472412 + r472417;
double r472419 = t;
double r472420 = r472418 - r472419;
return r472420;
}
double f(double x, double y, double z, double t) {
double r472421 = y;
double r472422 = cbrt(r472421);
double r472423 = r472422 * r472422;
double r472424 = log(r472423);
double r472425 = x;
double r472426 = r472424 * r472425;
double r472427 = log(r472422);
double r472428 = r472425 * r472427;
double r472429 = z;
double r472430 = 1.0;
double r472431 = log(r472430);
double r472432 = r472430 * r472421;
double r472433 = 0.5;
double r472434 = 2.0;
double r472435 = pow(r472421, r472434);
double r472436 = pow(r472430, r472434);
double r472437 = r472435 / r472436;
double r472438 = r472433 * r472437;
double r472439 = r472432 + r472438;
double r472440 = r472431 - r472439;
double r472441 = r472429 * r472440;
double r472442 = r472428 + r472441;
double r472443 = r472426 + r472442;
double r472444 = t;
double r472445 = r472443 - r472444;
return r472445;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 9.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 9.1
Taylor expanded around 0 0.3
rmApplied add-cube-cbrt0.4
Applied log-prod0.4
Applied distribute-rgt-in0.4
Applied associate-+l+0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020043
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(- (* (- z) (+ (+ (* 0.5 (* y y)) y) (* (/ 0.3333333333333333 (* 1 (* 1 1))) (* y (* y y))))) (- t (* x (log y))))
(- (+ (* x (log y)) (* z (log (- 1 y)))) t))