x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
\left(y \cdot \left(\left(1 - z\right) + \log \left({z}^{\frac{1}{3}} \cdot \sqrt[3]{z}\right)\right) + x \cdot 0.5\right) + \log \left(\sqrt[3]{z}\right) \cdot ydouble f(double x, double y, double z) {
double r298595 = x;
double r298596 = 0.5;
double r298597 = r298595 * r298596;
double r298598 = y;
double r298599 = 1.0;
double r298600 = z;
double r298601 = r298599 - r298600;
double r298602 = log(r298600);
double r298603 = r298601 + r298602;
double r298604 = r298598 * r298603;
double r298605 = r298597 + r298604;
return r298605;
}
double f(double x, double y, double z) {
double r298606 = y;
double r298607 = 1.0;
double r298608 = z;
double r298609 = r298607 - r298608;
double r298610 = 0.3333333333333333;
double r298611 = pow(r298608, r298610);
double r298612 = cbrt(r298608);
double r298613 = r298611 * r298612;
double r298614 = log(r298613);
double r298615 = r298609 + r298614;
double r298616 = r298606 * r298615;
double r298617 = x;
double r298618 = 0.5;
double r298619 = r298617 * r298618;
double r298620 = r298616 + r298619;
double r298621 = log(r298612);
double r298622 = r298621 * r298606;
double r298623 = r298620 + r298622;
return r298623;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 0.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 0.1
rmApplied distribute-lft-in0.1
Applied associate-+r+0.1
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied distribute-rgt-in0.1
Applied associate-+r+0.1
Simplified0.1
rmApplied pow1/30.1
Final simplification0.1
herbie shell --seed 2019356
(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)))))