\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\mathsf{fma}\left(\log y, x, z \cdot \left(\log 1 - \left(1 \cdot y + \frac{1}{2} \cdot \frac{{y}^{2}}{{1}^{2}}\right)\right) - t\right)double f(double x, double y, double z, double t) {
double r418862 = x;
double r418863 = y;
double r418864 = log(r418863);
double r418865 = r418862 * r418864;
double r418866 = z;
double r418867 = 1.0;
double r418868 = r418867 - r418863;
double r418869 = log(r418868);
double r418870 = r418866 * r418869;
double r418871 = r418865 + r418870;
double r418872 = t;
double r418873 = r418871 - r418872;
return r418873;
}
double f(double x, double y, double z, double t) {
double r418874 = y;
double r418875 = log(r418874);
double r418876 = x;
double r418877 = z;
double r418878 = 1.0;
double r418879 = log(r418878);
double r418880 = r418878 * r418874;
double r418881 = 0.5;
double r418882 = 2.0;
double r418883 = pow(r418874, r418882);
double r418884 = pow(r418878, r418882);
double r418885 = r418883 / r418884;
double r418886 = r418881 * r418885;
double r418887 = r418880 + r418886;
double r418888 = r418879 - r418887;
double r418889 = r418877 * r418888;
double r418890 = t;
double r418891 = r418889 - r418890;
double r418892 = fma(r418875, r418876, r418891);
return r418892;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
Initial program 9.5
Simplified9.5
Taylor expanded around 0 0.3
Final simplification0.3
herbie shell --seed 2020081 +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))