\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -5.129631320517597363958139490268193814357 \cdot 10^{-30}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{elif}\;y \le 3.156569997277614025814580562307745592284 \cdot 10^{-264}:\\
\;\;\;\;\frac{1}{\frac{y}{x \cdot \left(y - z\right)}}\\
\mathbf{else}:\\
\;\;\;\;\left(1 - \frac{z}{y}\right) \cdot x\\
\end{array}double f(double x, double y, double z) {
double r30055496 = x;
double r30055497 = y;
double r30055498 = z;
double r30055499 = r30055497 - r30055498;
double r30055500 = r30055496 * r30055499;
double r30055501 = r30055500 / r30055497;
return r30055501;
}
double f(double x, double y, double z) {
double r30055502 = y;
double r30055503 = -5.1296313205175974e-30;
bool r30055504 = r30055502 <= r30055503;
double r30055505 = x;
double r30055506 = z;
double r30055507 = r30055502 - r30055506;
double r30055508 = r30055502 / r30055507;
double r30055509 = r30055505 / r30055508;
double r30055510 = 3.156569997277614e-264;
bool r30055511 = r30055502 <= r30055510;
double r30055512 = 1.0;
double r30055513 = r30055505 * r30055507;
double r30055514 = r30055502 / r30055513;
double r30055515 = r30055512 / r30055514;
double r30055516 = r30055506 / r30055502;
double r30055517 = r30055512 - r30055516;
double r30055518 = r30055517 * r30055505;
double r30055519 = r30055511 ? r30055515 : r30055518;
double r30055520 = r30055504 ? r30055509 : r30055519;
return r30055520;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.2 |
|---|---|
| Target | 2.9 |
| Herbie | 3.0 |
if y < -5.1296313205175974e-30Initial program 15.7
rmApplied associate-/l*0.1
if -5.1296313205175974e-30 < y < 3.156569997277614e-264Initial program 7.9
rmApplied clear-num8.0
if 3.156569997277614e-264 < y Initial program 11.7
rmApplied *-un-lft-identity11.7
Applied times-frac2.8
Simplified2.8
rmApplied div-sub2.7
Simplified2.7
Final simplification3.0
herbie shell --seed 2019170 +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))