\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\log \left(x + y\right) + \mathsf{fma}\left(\log t, a - 0.5, \log z - t\right)double f(double x, double y, double z, double t, double a) {
double r295281 = x;
double r295282 = y;
double r295283 = r295281 + r295282;
double r295284 = log(r295283);
double r295285 = z;
double r295286 = log(r295285);
double r295287 = r295284 + r295286;
double r295288 = t;
double r295289 = r295287 - r295288;
double r295290 = a;
double r295291 = 0.5;
double r295292 = r295290 - r295291;
double r295293 = log(r295288);
double r295294 = r295292 * r295293;
double r295295 = r295289 + r295294;
return r295295;
}
double f(double x, double y, double z, double t, double a) {
double r295296 = x;
double r295297 = y;
double r295298 = r295296 + r295297;
double r295299 = log(r295298);
double r295300 = t;
double r295301 = log(r295300);
double r295302 = a;
double r295303 = 0.5;
double r295304 = r295302 - r295303;
double r295305 = z;
double r295306 = log(r295305);
double r295307 = r295306 - r295300;
double r295308 = fma(r295301, r295304, r295307);
double r295309 = r295299 + r295308;
return r295309;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 0.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
Initial program 0.3
rmApplied associate--l+0.3
Applied associate-+l+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020021 +o rules:numerics
(FPCore (x y z t a)
:name "Numeric.SpecFunctions:logGammaL from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(+ (log (+ x y)) (+ (- (log z) t) (* (- a 0.5) (log t))))
(+ (- (+ (log (+ x y)) (log z)) t) (* (- a 0.5) (log t))))