\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(x \cdot \log \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) + \mathsf{fma}\left(x, \log \left(\sqrt[3]{y}\right), \left(\log 1 - \mathsf{fma}\left(1, y, \frac{1}{2} \cdot \frac{{y}^{2}}{{1}^{2}}\right)\right) \cdot z\right)\right) - tdouble f(double x, double y, double z, double t) {
double r299850 = x;
double r299851 = y;
double r299852 = log(r299851);
double r299853 = r299850 * r299852;
double r299854 = z;
double r299855 = 1.0;
double r299856 = r299855 - r299851;
double r299857 = log(r299856);
double r299858 = r299854 * r299857;
double r299859 = r299853 + r299858;
double r299860 = t;
double r299861 = r299859 - r299860;
return r299861;
}
double f(double x, double y, double z, double t) {
double r299862 = x;
double r299863 = y;
double r299864 = cbrt(r299863);
double r299865 = r299864 * r299864;
double r299866 = log(r299865);
double r299867 = r299862 * r299866;
double r299868 = log(r299864);
double r299869 = 1.0;
double r299870 = log(r299869);
double r299871 = 0.5;
double r299872 = 2.0;
double r299873 = pow(r299863, r299872);
double r299874 = pow(r299869, r299872);
double r299875 = r299873 / r299874;
double r299876 = r299871 * r299875;
double r299877 = fma(r299869, r299863, r299876);
double r299878 = r299870 - r299877;
double r299879 = z;
double r299880 = r299878 * r299879;
double r299881 = fma(r299862, r299868, r299880);
double r299882 = r299867 + r299881;
double r299883 = t;
double r299884 = r299882 - r299883;
return r299884;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
Initial program 9.4
Taylor expanded around 0 0.3
Simplified0.3
rmApplied add-cube-cbrt0.3
Applied log-prod0.3
Applied distribute-lft-in0.3
Applied associate-+l+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019306 +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.333333333333333315 (* 1 (* 1 1))) (* y (* y y))))) (- t (* x (log y))))
(- (+ (* x (log y)) (* z (log (- 1 y)))) t))