\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;z \le -1.490642558059576896453221775138123235637 \cdot 10^{-108} \lor \neg \left(z \le 1.856430226021134379054288393664915709911 \cdot 10^{-163}\right) \land z \le 1.195496640822689062730349933551884171007 \cdot 10^{233}:\\
\;\;\;\;x - \frac{z}{\frac{y}{x}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{y}{y - z}}{x}}\\
\end{array}double f(double x, double y, double z) {
double r627492 = x;
double r627493 = y;
double r627494 = z;
double r627495 = r627493 - r627494;
double r627496 = r627492 * r627495;
double r627497 = r627496 / r627493;
return r627497;
}
double f(double x, double y, double z) {
double r627498 = z;
double r627499 = -1.4906425580595769e-108;
bool r627500 = r627498 <= r627499;
double r627501 = 1.8564302260211344e-163;
bool r627502 = r627498 <= r627501;
double r627503 = !r627502;
double r627504 = 1.195496640822689e+233;
bool r627505 = r627498 <= r627504;
bool r627506 = r627503 && r627505;
bool r627507 = r627500 || r627506;
double r627508 = x;
double r627509 = y;
double r627510 = r627509 / r627508;
double r627511 = r627498 / r627510;
double r627512 = r627508 - r627511;
double r627513 = 1.0;
double r627514 = r627509 - r627498;
double r627515 = r627509 / r627514;
double r627516 = r627515 / r627508;
double r627517 = r627513 / r627516;
double r627518 = r627507 ? r627512 : r627517;
return r627518;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.7 |
|---|---|
| Target | 3.0 |
| Herbie | 2.8 |
if z < -1.4906425580595769e-108 or 1.8564302260211344e-163 < z < 1.195496640822689e+233Initial program 11.6
Simplified11.3
rmApplied div-sub11.3
Simplified3.5
if -1.4906425580595769e-108 < z < 1.8564302260211344e-163 or 1.195496640822689e+233 < z Initial program 14.4
Simplified14.2
rmApplied clear-num14.3
Simplified1.7
Final simplification2.8
herbie shell --seed 2019195
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:herbie-target
(if (< z -2.060202331921739e+104) (- x (/ (* z x) y)) (if (< z 1.6939766013828526e+213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))