\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le 4.014228494605547884913065641302170952983 \cdot 10^{-282}:\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{elif}\;y \le 2.367911105194571555458594295483143652103 \cdot 10^{-120}:\\
\;\;\;\;x - \left(x \cdot z\right) \cdot \frac{1}{y}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\end{array}double f(double x, double y, double z) {
double r589865 = x;
double r589866 = y;
double r589867 = z;
double r589868 = r589866 - r589867;
double r589869 = r589865 * r589868;
double r589870 = r589869 / r589866;
return r589870;
}
double f(double x, double y, double z) {
double r589871 = y;
double r589872 = 4.014228494605548e-282;
bool r589873 = r589871 <= r589872;
double r589874 = x;
double r589875 = z;
double r589876 = r589871 - r589875;
double r589877 = r589871 / r589876;
double r589878 = r589874 / r589877;
double r589879 = 2.3679111051945716e-120;
bool r589880 = r589871 <= r589879;
double r589881 = r589874 * r589875;
double r589882 = 1.0;
double r589883 = r589882 / r589871;
double r589884 = r589881 * r589883;
double r589885 = r589874 - r589884;
double r589886 = r589876 / r589871;
double r589887 = r589874 * r589886;
double r589888 = r589880 ? r589885 : r589887;
double r589889 = r589873 ? r589878 : r589888;
return r589889;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.7 |
|---|---|
| Target | 2.9 |
| Herbie | 2.6 |
if y < 4.014228494605548e-282Initial program 12.6
rmApplied associate-/l*3.6
if 4.014228494605548e-282 < y < 2.3679111051945716e-120Initial program 9.1
Taylor expanded around 0 5.0
rmApplied div-inv5.1
if 2.3679111051945716e-120 < y Initial program 13.8
rmApplied *-un-lft-identity13.8
Applied times-frac0.8
Simplified0.8
Final simplification2.6
herbie shell --seed 2019235
(FPCore (x y z)
:name "Diagrams.Backend.Cairo.Internal:setTexture from diagrams-cairo-1.3.0.3"
:precision binary64
:herbie-target
(if (< z -2.060202331921739e104) (- x (/ (* z x) y)) (if (< z 1.69397660138285259e213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))