\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(x \cdot \log \left(\sqrt[3]{y}\right) - \mathsf{fma}\left(z \cdot y, \mathsf{fma}\left(0.5, y, 1\right), t\right)\right) + \log \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot xdouble f(double x, double y, double z, double t) {
double r14591981 = x;
double r14591982 = y;
double r14591983 = log(r14591982);
double r14591984 = r14591981 * r14591983;
double r14591985 = z;
double r14591986 = 1.0;
double r14591987 = r14591986 - r14591982;
double r14591988 = log(r14591987);
double r14591989 = r14591985 * r14591988;
double r14591990 = r14591984 + r14591989;
double r14591991 = t;
double r14591992 = r14591990 - r14591991;
return r14591992;
}
double f(double x, double y, double z, double t) {
double r14591993 = x;
double r14591994 = y;
double r14591995 = cbrt(r14591994);
double r14591996 = log(r14591995);
double r14591997 = r14591993 * r14591996;
double r14591998 = z;
double r14591999 = r14591998 * r14591994;
double r14592000 = 0.5;
double r14592001 = 1.0;
double r14592002 = fma(r14592000, r14591994, r14592001);
double r14592003 = t;
double r14592004 = fma(r14591999, r14592002, r14592003);
double r14592005 = r14591997 - r14592004;
double r14592006 = r14591995 * r14591995;
double r14592007 = log(r14592006);
double r14592008 = r14592007 * r14591993;
double r14592009 = r14592005 + r14592008;
return r14592009;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 9.7
Simplified9.7
Taylor expanded around 0 0.3
Simplified0.3
Taylor expanded around inf 0.3
Simplified0.3
rmApplied add-cube-cbrt0.3
Applied log-prod0.4
Applied distribute-lft-in0.3
Applied associate--l+0.3
Applied associate--l+0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019172 +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) (* (/ 0.3333333333333333 (* 1.0 (* 1.0 1.0))) (* y (* y y))))) (- t (* x (log y))))
(- (+ (* x (log y)) (* z (log (- 1.0 y)))) t))