\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\mathsf{fma}\left(a - 0.5, \log t, \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 r238831 = x;
double r238832 = y;
double r238833 = r238831 + r238832;
double r238834 = log(r238833);
double r238835 = z;
double r238836 = log(r238835);
double r238837 = r238834 + r238836;
double r238838 = t;
double r238839 = r238837 - r238838;
double r238840 = a;
double r238841 = 0.5;
double r238842 = r238840 - r238841;
double r238843 = log(r238838);
double r238844 = r238842 * r238843;
double r238845 = r238839 + r238844;
return r238845;
}
double f(double x, double y, double z, double t, double a) {
double r238846 = a;
double r238847 = 0.5;
double r238848 = r238846 - r238847;
double r238849 = t;
double r238850 = log(r238849);
double r238851 = x;
double r238852 = y;
double r238853 = r238851 + r238852;
double r238854 = log(r238853);
double r238855 = z;
double r238856 = sqrt(r238855);
double r238857 = log(r238856);
double r238858 = r238854 + r238857;
double r238859 = r238858 + r238857;
double r238860 = r238859 - r238849;
double r238861 = fma(r238848, r238850, r238860);
return r238861;
}




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 2019347 +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))))