x \cdot 0.5 + y \cdot \left(\left(1 - z\right) + \log z\right)
x \cdot 0.5 + \left(\left(1 - \left(z - 2 \cdot \log \left(\sqrt[3]{z}\right)\right)\right) \cdot y + \left(y \cdot \log \left(\sqrt[3]{\sqrt[3]{z} \cdot \sqrt[3]{z}}\right) + y \cdot \log \left(\sqrt[3]{\sqrt[3]{z}}\right)\right)\right)double f(double x, double y, double z) {
double r334018 = x;
double r334019 = 0.5;
double r334020 = r334018 * r334019;
double r334021 = y;
double r334022 = 1.0;
double r334023 = z;
double r334024 = r334022 - r334023;
double r334025 = log(r334023);
double r334026 = r334024 + r334025;
double r334027 = r334021 * r334026;
double r334028 = r334020 + r334027;
return r334028;
}
double f(double x, double y, double z) {
double r334029 = x;
double r334030 = 0.5;
double r334031 = r334029 * r334030;
double r334032 = 1.0;
double r334033 = z;
double r334034 = 2.0;
double r334035 = cbrt(r334033);
double r334036 = log(r334035);
double r334037 = r334034 * r334036;
double r334038 = r334033 - r334037;
double r334039 = r334032 - r334038;
double r334040 = y;
double r334041 = r334039 * r334040;
double r334042 = r334035 * r334035;
double r334043 = cbrt(r334042);
double r334044 = log(r334043);
double r334045 = r334040 * r334044;
double r334046 = cbrt(r334035);
double r334047 = log(r334046);
double r334048 = r334040 * r334047;
double r334049 = r334045 + r334048;
double r334050 = r334041 + r334049;
double r334051 = r334031 + r334050;
return r334051;
}




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
rmApplied add-cube-cbrt0.1
Applied log-prod0.1
Applied distribute-lft-in0.1
Applied associate-+r+0.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Applied cbrt-prod0.1
Applied log-prod0.1
Applied distribute-lft-in0.1
Final simplification0.1
herbie shell --seed 2020057 +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)))))