\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\frac{\sqrt[3]{\left(y - z\right) + 1} \cdot \sqrt[3]{\left(y - z\right) + 1}}{\sqrt[3]{z} \cdot \sqrt[3]{z}} \cdot \frac{x}{\frac{\sqrt[3]{z}}{\sqrt[3]{\left(y - z\right) + 1}}}double f(double x, double y, double z) {
double r382252 = x;
double r382253 = y;
double r382254 = z;
double r382255 = r382253 - r382254;
double r382256 = 1.0;
double r382257 = r382255 + r382256;
double r382258 = r382252 * r382257;
double r382259 = r382258 / r382254;
return r382259;
}
double f(double x, double y, double z) {
double r382260 = y;
double r382261 = z;
double r382262 = r382260 - r382261;
double r382263 = 1.0;
double r382264 = r382262 + r382263;
double r382265 = cbrt(r382264);
double r382266 = r382265 * r382265;
double r382267 = cbrt(r382261);
double r382268 = r382267 * r382267;
double r382269 = r382266 / r382268;
double r382270 = x;
double r382271 = r382267 / r382265;
double r382272 = r382270 / r382271;
double r382273 = r382269 * r382272;
return r382273;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 9.9 |
|---|---|
| Target | 0.4 |
| Herbie | 1.3 |
Initial program 9.9
rmApplied associate-/l*3.4
rmApplied add-cube-cbrt4.3
Applied add-cube-cbrt4.1
Applied times-frac4.1
Applied *-un-lft-identity4.1
Applied times-frac1.3
Simplified1.3
Final simplification1.3
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.TwoD.Segment.Bernstein:evaluateBernstein from diagrams-lib-1.3.0.3"
:precision binary64
:herbie-target
(if (< x -2.71483106713436e-162) (- (* (+ 1 y) (/ x z)) x) (if (< x 3.874108816439546e-197) (* (* x (+ (- y z) 1)) (/ 1 z)) (- (* (+ 1 y) (/ x z)) x)))
(/ (* x (+ (- y z) 1)) z))