\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(\left(\left(2 \cdot \log \left(\sqrt[3]{y}\right)\right) \cdot x + \frac{1}{3} \cdot \left(\log y \cdot x\right)\right) + z \cdot \left(\log 1 - y \cdot \left(1 + \frac{\frac{1}{2}}{\frac{1 \cdot 1}{y}}\right)\right)\right) - tdouble f(double x, double y, double z, double t) {
double r292502 = x;
double r292503 = y;
double r292504 = log(r292503);
double r292505 = r292502 * r292504;
double r292506 = z;
double r292507 = 1.0;
double r292508 = r292507 - r292503;
double r292509 = log(r292508);
double r292510 = r292506 * r292509;
double r292511 = r292505 + r292510;
double r292512 = t;
double r292513 = r292511 - r292512;
return r292513;
}
double f(double x, double y, double z, double t) {
double r292514 = 2.0;
double r292515 = y;
double r292516 = cbrt(r292515);
double r292517 = log(r292516);
double r292518 = r292514 * r292517;
double r292519 = x;
double r292520 = r292518 * r292519;
double r292521 = 0.3333333333333333;
double r292522 = log(r292515);
double r292523 = r292522 * r292519;
double r292524 = r292521 * r292523;
double r292525 = r292520 + r292524;
double r292526 = z;
double r292527 = 1.0;
double r292528 = log(r292527);
double r292529 = 0.5;
double r292530 = r292527 * r292527;
double r292531 = r292530 / r292515;
double r292532 = r292529 / r292531;
double r292533 = r292527 + r292532;
double r292534 = r292515 * r292533;
double r292535 = r292528 - r292534;
double r292536 = r292526 * r292535;
double r292537 = r292525 + r292536;
double r292538 = t;
double r292539 = r292537 - r292538;
return r292539;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 9.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 9.5
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-cube-cbrt0.4
Applied log-prod0.4
Applied distribute-lft-in0.4
Simplified0.4
Simplified0.4
rmApplied pow1/30.4
Applied log-pow0.4
Applied associate-*l*0.4
Final simplification0.4
herbie shell --seed 2019325
(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))