\left(\left(\log \left(x + y\right) + \log z\right) - t\right) + \left(a - 0.5\right) \cdot \log t
\begin{array}{l}
t_1 := \log \left(\sqrt[3]{y}\right)\\
t_1 + \left(\left(\left(\mathsf{fma}\left(a, \log t, \log z\right) + \frac{x}{y}\right) - \mathsf{fma}\left(0.5, \mathsf{fma}\left(\frac{x}{y}, \frac{x}{y}, \log t\right), t\right)\right) + 2 \cdot t_1\right)
\end{array}
(FPCore (x y z t a) :precision binary64 (+ (- (+ (log (+ x y)) (log z)) t) (* (- a 0.5) (log t))))
(FPCore (x y z t a)
:precision binary64
(let* ((t_1 (log (cbrt y))))
(+
t_1
(+
(-
(+ (fma a (log t) (log z)) (/ x y))
(fma 0.5 (fma (/ x y) (/ x y) (log t)) t))
(* 2.0 t_1)))))double code(double x, double y, double z, double t, double a) {
return ((log(x + y) + log(z)) - t) + ((a - 0.5) * log(t));
}
double code(double x, double y, double z, double t, double a) {
double t_1 = log(cbrt(y));
return t_1 + (((fma(a, log(t), log(z)) + (x / y)) - fma(0.5, fma((x / y), (x / y), log(t)), t)) + (2.0 * t_1));
}




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.4 |
Initial program 0.3
Taylor expanded in y around inf 7.9
Simplified0.4
Applied associate-+r-_binary640.4
Applied associate--r-_binary640.4
Simplified0.4
Applied add-cube-cbrt_binary640.4
Applied log-prod_binary640.4
Applied associate-+r+_binary640.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2022068
(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))))