\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -4.565615297402513793822059617442033581563 \cdot 10^{-201} \lor \neg \left(y \le 1.727845853063427358970787003444816519654 \cdot 10^{-151}\right):\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{y}{x \cdot \left(y - z\right)}}\\
\end{array}double f(double x, double y, double z) {
double r820393 = x;
double r820394 = y;
double r820395 = z;
double r820396 = r820394 - r820395;
double r820397 = r820393 * r820396;
double r820398 = r820397 / r820394;
return r820398;
}
double f(double x, double y, double z) {
double r820399 = y;
double r820400 = -4.565615297402514e-201;
bool r820401 = r820399 <= r820400;
double r820402 = 1.7278458530634274e-151;
bool r820403 = r820399 <= r820402;
double r820404 = !r820403;
bool r820405 = r820401 || r820404;
double r820406 = x;
double r820407 = z;
double r820408 = r820399 - r820407;
double r820409 = r820399 / r820408;
double r820410 = r820406 / r820409;
double r820411 = 1.0;
double r820412 = r820406 * r820408;
double r820413 = r820399 / r820412;
double r820414 = r820411 / r820413;
double r820415 = r820405 ? r820410 : r820414;
return r820415;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.8 |
|---|---|
| Target | 3.2 |
| Herbie | 3.0 |
if y < -4.565615297402514e-201 or 1.7278458530634274e-151 < y Initial program 13.0
rmApplied associate-/l*1.4
if -4.565615297402514e-201 < y < 1.7278458530634274e-151Initial program 11.9
rmApplied clear-num12.0
Simplified12.0
Final simplification3.0
herbie shell --seed 2019196 +o rules:numerics
(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))