\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\mathsf{fma}\left(1, \frac{x}{z}, \left(x \cdot \frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{z} \cdot \sqrt[3]{z}}\right) \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{z}}\right) - xdouble f(double x, double y, double z) {
double r617377 = x;
double r617378 = y;
double r617379 = z;
double r617380 = r617378 - r617379;
double r617381 = 1.0;
double r617382 = r617380 + r617381;
double r617383 = r617377 * r617382;
double r617384 = r617383 / r617379;
return r617384;
}
double f(double x, double y, double z) {
double r617385 = 1.0;
double r617386 = x;
double r617387 = z;
double r617388 = r617386 / r617387;
double r617389 = y;
double r617390 = cbrt(r617389);
double r617391 = r617390 * r617390;
double r617392 = cbrt(r617387);
double r617393 = r617392 * r617392;
double r617394 = r617391 / r617393;
double r617395 = r617386 * r617394;
double r617396 = r617390 / r617392;
double r617397 = r617395 * r617396;
double r617398 = fma(r617385, r617388, r617397);
double r617399 = r617398 - r617386;
return r617399;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.4 |
|---|---|
| Target | 0.4 |
| Herbie | 0.9 |
Initial program 10.4
Taylor expanded around 0 3.6
Simplified3.6
rmApplied *-un-lft-identity3.6
Applied times-frac3.3
Simplified3.3
rmApplied add-cube-cbrt3.6
Applied add-cube-cbrt3.7
Applied times-frac3.7
Applied associate-*r*0.9
Final simplification0.9
herbie shell --seed 2020081 +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))