\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 r561690 = x;
double r561691 = y;
double r561692 = z;
double r561693 = r561691 - r561692;
double r561694 = r561690 * r561693;
double r561695 = r561694 / r561691;
return r561695;
}
double f(double x, double y, double z) {
double r561696 = y;
double r561697 = 4.014228494605548e-282;
bool r561698 = r561696 <= r561697;
double r561699 = x;
double r561700 = z;
double r561701 = r561696 - r561700;
double r561702 = r561696 / r561701;
double r561703 = r561699 / r561702;
double r561704 = 2.3679111051945716e-120;
bool r561705 = r561696 <= r561704;
double r561706 = r561699 * r561700;
double r561707 = 1.0;
double r561708 = r561707 / r561696;
double r561709 = r561706 * r561708;
double r561710 = r561699 - r561709;
double r561711 = r561701 / r561696;
double r561712 = r561699 * r561711;
double r561713 = r561705 ? r561710 : r561712;
double r561714 = r561698 ? r561703 : r561713;
return r561714;
}




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 +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.060202331921739e104) (- x (/ (* z x) y)) (if (< z 1.69397660138285259e213) (/ x (/ y (- y z))) (* (- y z) (/ x y))))
(/ (* x (- y z)) y))