\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(x \cdot \log \left(\left|{y}^{\frac{1}{3}}\right| \cdot \left|{y}^{\frac{1}{3}}\right|\right) + \mathsf{fma}\left(\log \left(\sqrt[3]{y}\right), x, 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 r520363 = x;
double r520364 = y;
double r520365 = log(r520364);
double r520366 = r520363 * r520365;
double r520367 = z;
double r520368 = 1.0;
double r520369 = r520368 - r520364;
double r520370 = log(r520369);
double r520371 = r520367 * r520370;
double r520372 = r520366 + r520371;
double r520373 = t;
double r520374 = r520372 - r520373;
return r520374;
}
double f(double x, double y, double z, double t) {
double r520375 = x;
double r520376 = y;
double r520377 = 0.3333333333333333;
double r520378 = pow(r520376, r520377);
double r520379 = fabs(r520378);
double r520380 = r520379 * r520379;
double r520381 = log(r520380);
double r520382 = r520375 * r520381;
double r520383 = cbrt(r520376);
double r520384 = log(r520383);
double r520385 = z;
double r520386 = 1.0;
double r520387 = log(r520386);
double r520388 = r520386 * r520376;
double r520389 = 0.5;
double r520390 = 2.0;
double r520391 = pow(r520376, r520390);
double r520392 = pow(r520386, r520390);
double r520393 = r520391 / r520392;
double r520394 = r520389 * r520393;
double r520395 = r520388 + r520394;
double r520396 = r520387 - r520395;
double r520397 = r520385 * r520396;
double r520398 = fma(r520384, r520375, r520397);
double r520399 = r520382 + r520398;
double r520400 = t;
double r520401 = r520399 - r520400;
return r520401;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 9.5
Taylor expanded around 0 0.3
rmApplied add-cube-cbrt0.3
Applied log-prod0.4
Applied distribute-lft-in0.4
Applied associate-+l+0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019362 +o rules:numerics
(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))