\left(x \cdot \log y + z \cdot \log \left(1.0 - y\right)\right) - t
\mathsf{fma}\left(\mathsf{fma}\left(\frac{y}{1.0} \cdot \frac{y}{1.0}, \frac{-1}{2}, \log 1.0 - y \cdot 1.0\right), z, \left(x \cdot \sqrt[3]{\log y}\right) \cdot \sqrt[3]{\log y \cdot \log y} - t\right)double f(double x, double y, double z, double t) {
double r19802466 = x;
double r19802467 = y;
double r19802468 = log(r19802467);
double r19802469 = r19802466 * r19802468;
double r19802470 = z;
double r19802471 = 1.0;
double r19802472 = r19802471 - r19802467;
double r19802473 = log(r19802472);
double r19802474 = r19802470 * r19802473;
double r19802475 = r19802469 + r19802474;
double r19802476 = t;
double r19802477 = r19802475 - r19802476;
return r19802477;
}
double f(double x, double y, double z, double t) {
double r19802478 = y;
double r19802479 = 1.0;
double r19802480 = r19802478 / r19802479;
double r19802481 = r19802480 * r19802480;
double r19802482 = -0.5;
double r19802483 = log(r19802479);
double r19802484 = r19802478 * r19802479;
double r19802485 = r19802483 - r19802484;
double r19802486 = fma(r19802481, r19802482, r19802485);
double r19802487 = z;
double r19802488 = x;
double r19802489 = log(r19802478);
double r19802490 = cbrt(r19802489);
double r19802491 = r19802488 * r19802490;
double r19802492 = r19802489 * r19802489;
double r19802493 = cbrt(r19802492);
double r19802494 = r19802491 * r19802493;
double r19802495 = t;
double r19802496 = r19802494 - r19802495;
double r19802497 = fma(r19802486, r19802487, r19802496);
return r19802497;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.6 |
Initial program 9.0
Simplified9.0
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-cube-cbrt0.8
Applied associate-*l*0.8
rmApplied cbrt-unprod0.6
Final simplification0.6
herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, B"
:herbie-target
(- (* (- z) (+ (+ (* 0.5 (* y y)) y) (* (/ 1/3 (* 1.0 (* 1.0 1.0))) (* y (* y y))))) (- t (* x (log y))))
(- (+ (* x (log y)) (* z (log (- 1.0 y)))) t))