\left(\left(\left(x + y\right) + z\right) - z \cdot \log t\right) + \left(a - 0.5\right) \cdot b
\mathsf{fma}\left(b, a - 0.5, \mathsf{fma}\left(z, \log \left(\frac{e^{1}}{t}\right), x + y\right) + \log t \cdot \left(\left(-z\right) + z\right)\right)double f(double x, double y, double z, double t, double a, double b) {
double r305316 = x;
double r305317 = y;
double r305318 = r305316 + r305317;
double r305319 = z;
double r305320 = r305318 + r305319;
double r305321 = t;
double r305322 = log(r305321);
double r305323 = r305319 * r305322;
double r305324 = r305320 - r305323;
double r305325 = a;
double r305326 = 0.5;
double r305327 = r305325 - r305326;
double r305328 = b;
double r305329 = r305327 * r305328;
double r305330 = r305324 + r305329;
return r305330;
}
double f(double x, double y, double z, double t, double a, double b) {
double r305331 = b;
double r305332 = a;
double r305333 = 0.5;
double r305334 = r305332 - r305333;
double r305335 = z;
double r305336 = 1.0;
double r305337 = exp(r305336);
double r305338 = t;
double r305339 = r305337 / r305338;
double r305340 = log(r305339);
double r305341 = x;
double r305342 = y;
double r305343 = r305341 + r305342;
double r305344 = fma(r305335, r305340, r305343);
double r305345 = log(r305338);
double r305346 = -r305335;
double r305347 = r305346 + r305335;
double r305348 = r305345 * r305347;
double r305349 = r305344 + r305348;
double r305350 = fma(r305331, r305334, r305349);
return r305350;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 0.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt32.4
Applied prod-diff32.4
Simplified0.1
Simplified0.1
rmApplied add-log-exp0.1
Applied diff-log0.1
Final simplification0.1
herbie shell --seed 2019353 +o rules:numerics
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logBeta from math-functions-0.1.5.2, A"
:precision binary64
:herbie-target
(+ (+ (+ x y) (/ (* (- 1 (pow (log t) 2)) z) (+ 1 (log t)))) (* (- a 0.5) b))
(+ (- (+ (+ x y) z) (* z (log t))) (* (- a 0.5) b)))