\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(\log \left(\sqrt[3]{y} \cdot \sqrt[3]{y}\right) \cdot x + \mathsf{fma}\left(\log \left({\left({y}^{\frac{1}{3}}\right)}^{\frac{2}{3}} \cdot {\left(\sqrt[3]{y}\right)}^{\frac{1}{3}}\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 r356071 = x;
double r356072 = y;
double r356073 = log(r356072);
double r356074 = r356071 * r356073;
double r356075 = z;
double r356076 = 1.0;
double r356077 = r356076 - r356072;
double r356078 = log(r356077);
double r356079 = r356075 * r356078;
double r356080 = r356074 + r356079;
double r356081 = t;
double r356082 = r356080 - r356081;
return r356082;
}
double f(double x, double y, double z, double t) {
double r356083 = y;
double r356084 = cbrt(r356083);
double r356085 = r356084 * r356084;
double r356086 = log(r356085);
double r356087 = x;
double r356088 = r356086 * r356087;
double r356089 = 0.3333333333333333;
double r356090 = pow(r356083, r356089);
double r356091 = 0.6666666666666666;
double r356092 = pow(r356090, r356091);
double r356093 = pow(r356084, r356089);
double r356094 = r356092 * r356093;
double r356095 = log(r356094);
double r356096 = z;
double r356097 = 1.0;
double r356098 = log(r356097);
double r356099 = r356097 * r356083;
double r356100 = 0.5;
double r356101 = 2.0;
double r356102 = pow(r356083, r356101);
double r356103 = pow(r356097, r356101);
double r356104 = r356102 / r356103;
double r356105 = r356100 * r356104;
double r356106 = r356099 + r356105;
double r356107 = r356098 - r356106;
double r356108 = r356096 * r356107;
double r356109 = fma(r356095, r356087, r356108);
double r356110 = r356088 + r356109;
double r356111 = t;
double r356112 = r356110 - r356111;
return r356112;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
Initial program 9.3
Taylor expanded around 0 0.3
rmApplied add-cube-cbrt0.3
Applied log-prod0.4
Applied distribute-rgt-in0.4
Applied associate-+l+0.4
Simplified0.4
rmApplied pow1/30.3
rmApplied add-cube-cbrt0.3
Simplified0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020100 +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))