\frac{x \cdot \left(\left(y - z\right) + 1\right)}{z}\begin{array}{l}
\mathbf{if}\;z \le -8.180654286668062195300281725905696886021 \cdot 10^{104} \lor \neg \left(z \le 2.201016357696081879363280295698727206869 \cdot 10^{-60}\right):\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z}, \frac{x}{\frac{z}{y}}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{x}{z}, \frac{x \cdot y}{z}\right) - x\\
\end{array}double f(double x, double y, double z) {
double r853459 = x;
double r853460 = y;
double r853461 = z;
double r853462 = r853460 - r853461;
double r853463 = 1.0;
double r853464 = r853462 + r853463;
double r853465 = r853459 * r853464;
double r853466 = r853465 / r853461;
return r853466;
}
double f(double x, double y, double z) {
double r853467 = z;
double r853468 = -8.180654286668062e+104;
bool r853469 = r853467 <= r853468;
double r853470 = 2.201016357696082e-60;
bool r853471 = r853467 <= r853470;
double r853472 = !r853471;
bool r853473 = r853469 || r853472;
double r853474 = 1.0;
double r853475 = x;
double r853476 = r853475 / r853467;
double r853477 = y;
double r853478 = r853467 / r853477;
double r853479 = r853475 / r853478;
double r853480 = fma(r853474, r853476, r853479);
double r853481 = r853480 - r853475;
double r853482 = r853475 * r853477;
double r853483 = r853482 / r853467;
double r853484 = fma(r853474, r853476, r853483);
double r853485 = r853484 - r853475;
double r853486 = r853473 ? r853481 : r853485;
return r853486;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 10.2 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if z < -8.180654286668062e+104 or 2.201016357696082e-60 < z Initial program 17.4
rmApplied associate-/l*0.1
Taylor expanded around 0 5.5
Simplified5.5
rmApplied clear-num5.5
rmApplied *-un-lft-identity5.5
Applied times-frac0.2
Applied associate-/r*0.1
Simplified0.1
if -8.180654286668062e+104 < z < 2.201016357696082e-60Initial program 1.4
rmApplied associate-/l*6.8
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.4
herbie shell --seed 2019362 +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))