x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\mathsf{fma}\left(x, 0.5, \mathsf{fma}\left(y, \log \left({\left({z}^{\left(\sqrt{0.6666666666666666}\right)}\right)}^{\left(\sqrt{0.6666666666666666}\right)} \cdot {\left(\sqrt[3]{-1}\right)}^{2}\right), y\right) + y \cdot \left(\log \left(\sqrt[3]{-1} \cdot \sqrt[3]{-z}\right) - z\right)\right)
(FPCore (x y z) :precision binary64 (+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))
(FPCore (x y z)
:precision binary64
(fma
x
0.5
(+
(fma
y
(log
(*
(pow (pow z (sqrt 0.6666666666666666)) (sqrt 0.6666666666666666))
(pow (cbrt -1.0) 2.0)))
y)
(* y (- (log (* (cbrt -1.0) (cbrt (- z)))) z)))))double code(double x, double y, double z) {
return (x * 0.5) + (y * ((1.0 - z) + log(z)));
}
double code(double x, double y, double z) {
return fma(x, 0.5, (fma(y, log((pow(pow(z, sqrt(0.6666666666666666)), sqrt(0.6666666666666666)) * pow(cbrt(-1.0), 2.0))), y) + (y * (log((cbrt(-1.0) * cbrt(-z))) - z))));
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
Simplified0.1
Applied add-cube-cbrt_binary640.1
Applied log-prod_binary640.1
Applied associate--l+_binary640.1
Taylor expanded in z around -inf 64.0
Simplified0.1
Applied add-sqr-sqrt_binary640.1
Applied pow-unpow_binary640.1
Final simplification0.1
herbie shell --seed 2022125
(FPCore (x y z)
:name "System.Random.MWC.Distributions:gamma from mwc-random-0.13.3.2"
:precision binary64
:herbie-target
(- (+ y (* 0.5 x)) (* y (- z (log z))))
(+ (* x 0.5) (* y (+ (- 1.0 z) (log z)))))