x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
x \cdot 0.5 + \left(y \cdot \mathsf{fma}\left(2, \log \left(\sqrt[3]{z}\right), 1 - z\right) + \log \left({z}^{\frac{1}{3}}\right) \cdot y\right)double f(double x, double y, double z) {
double r229734 = x;
double r229735 = 0.5;
double r229736 = r229734 * r229735;
double r229737 = y;
double r229738 = 1.0;
double r229739 = z;
double r229740 = r229738 - r229739;
double r229741 = log(r229739);
double r229742 = r229740 + r229741;
double r229743 = r229737 * r229742;
double r229744 = r229736 + r229743;
return r229744;
}
double f(double x, double y, double z) {
double r229745 = x;
double r229746 = 0.5;
double r229747 = r229745 * r229746;
double r229748 = y;
double r229749 = 2.0;
double r229750 = z;
double r229751 = cbrt(r229750);
double r229752 = log(r229751);
double r229753 = 1.0;
double r229754 = r229753 - r229750;
double r229755 = fma(r229749, r229752, r229754);
double r229756 = r229748 * r229755;
double r229757 = 0.3333333333333333;
double r229758 = pow(r229750, r229757);
double r229759 = log(r229758);
double r229760 = r229759 * r229748;
double r229761 = r229756 + r229760;
double r229762 = r229747 + r229761;
return r229762;
}




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
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied associate-+r+0.1
Simplified0.1
rmApplied distribute-lft-in0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020036 +o rules:numerics
(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 z) (log z)))))