\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -1.202704420599776119000768348402627115529 \cdot 10^{-68}:\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\mathbf{elif}\;y \le -2.739430284169036711408746407652821381307 \cdot 10^{-229}:\\
\;\;\;\;\frac{\frac{x}{y}}{\frac{1}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\end{array}double f(double x, double y, double z) {
double r808428 = x;
double r808429 = y;
double r808430 = z;
double r808431 = r808429 - r808430;
double r808432 = r808428 * r808431;
double r808433 = r808432 / r808429;
return r808433;
}
double f(double x, double y, double z) {
double r808434 = y;
double r808435 = -1.2027044205997761e-68;
bool r808436 = r808434 <= r808435;
double r808437 = x;
double r808438 = z;
double r808439 = r808434 - r808438;
double r808440 = r808439 / r808434;
double r808441 = r808437 * r808440;
double r808442 = -2.7394302841690367e-229;
bool r808443 = r808434 <= r808442;
double r808444 = r808437 / r808434;
double r808445 = 1.0;
double r808446 = r808445 / r808439;
double r808447 = r808444 / r808446;
double r808448 = r808434 / r808439;
double r808449 = r808437 / r808448;
double r808450 = r808443 ? r808447 : r808449;
double r808451 = r808436 ? r808441 : r808450;
return r808451;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.6 |
|---|---|
| Target | 3.1 |
| Herbie | 3.3 |
if y < -1.2027044205997761e-68Initial program 15.0
rmApplied *-un-lft-identity15.0
Applied times-frac0.4
Simplified0.4
if -1.2027044205997761e-68 < y < -2.7394302841690367e-229Initial program 7.4
rmApplied associate-/l*6.9
rmApplied div-inv7.0
Applied associate-/r*8.4
if -2.7394302841690367e-229 < y Initial program 12.2
rmApplied associate-/l*4.0
Final simplification3.3
herbie shell --seed 2020002 +o rules:numerics
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
: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))