\left(x \cdot \log y + z \cdot \log \left(1 - y\right)\right) - t
\left(\left(\mathsf{fma}\left(-y, 1, y \cdot 1\right) \cdot z - \left(0.5 \cdot z\right) \cdot \left(y \cdot y\right)\right) + \mathsf{fma}\left(\log 1 + \left(-y\right) \cdot 1, z, x \cdot \log y\right)\right) - tdouble f(double x, double y, double z, double t) {
double r394153 = x;
double r394154 = y;
double r394155 = log(r394154);
double r394156 = r394153 * r394155;
double r394157 = z;
double r394158 = 1.0;
double r394159 = r394158 - r394154;
double r394160 = log(r394159);
double r394161 = r394157 * r394160;
double r394162 = r394156 + r394161;
double r394163 = t;
double r394164 = r394162 - r394163;
return r394164;
}
double f(double x, double y, double z, double t) {
double r394165 = y;
double r394166 = -r394165;
double r394167 = 1.0;
double r394168 = r394165 * r394167;
double r394169 = fma(r394166, r394167, r394168);
double r394170 = z;
double r394171 = r394169 * r394170;
double r394172 = 0.5;
double r394173 = r394172 * r394170;
double r394174 = r394165 * r394165;
double r394175 = r394173 * r394174;
double r394176 = r394171 - r394175;
double r394177 = log(r394167);
double r394178 = r394166 * r394167;
double r394179 = r394177 + r394178;
double r394180 = x;
double r394181 = log(r394165);
double r394182 = r394180 * r394181;
double r394183 = fma(r394179, r394170, r394182);
double r394184 = r394176 + r394183;
double r394185 = t;
double r394186 = r394184 - r394185;
return r394186;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 9.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
Initial program 9.6
Taylor expanded around 0 0.4
Simplified0.4
rmApplied pow10.4
Applied log-pow0.4
Applied prod-diff0.4
Applied distribute-lft-in0.4
Applied associate--l+0.4
Applied associate-+r+0.4
Simplified0.4
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019179 +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))