\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\mathsf{fma}\left(\log t, a - 0.5, \left(\left(\log \left(x + y\right) + \log \left(\sqrt{z}\right)\right) + \log \left(\sqrt{z}\right)\right) - t\right)double f(double x, double y, double z, double t, double a) {
double r460698 = x;
double r460699 = y;
double r460700 = r460698 + r460699;
double r460701 = log(r460700);
double r460702 = z;
double r460703 = log(r460702);
double r460704 = r460701 + r460703;
double r460705 = t;
double r460706 = r460704 - r460705;
double r460707 = a;
double r460708 = 0.5;
double r460709 = r460707 - r460708;
double r460710 = log(r460705);
double r460711 = r460709 * r460710;
double r460712 = r460706 + r460711;
return r460712;
}
double f(double x, double y, double z, double t, double a) {
double r460713 = t;
double r460714 = log(r460713);
double r460715 = a;
double r460716 = 0.5;
double r460717 = r460715 - r460716;
double r460718 = x;
double r460719 = y;
double r460720 = r460718 + r460719;
double r460721 = log(r460720);
double r460722 = z;
double r460723 = sqrt(r460722);
double r460724 = log(r460723);
double r460725 = r460721 + r460724;
double r460726 = r460725 + r460724;
double r460727 = r460726 - r460713;
double r460728 = fma(r460714, r460717, r460727);
return r460728;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 0.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
Initial program 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
Applied associate-+r+0.3
Final simplification0.3
herbie shell --seed 2020100 +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))))