\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -1071459700543.7744 \lor \neg \left(y \le -4.37709134363842535 \cdot 10^{-213}\right):\\
\;\;\;\;\frac{x}{{\left(\frac{y}{y - z}\right)}^{1}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y} \cdot \left(y - z\right)\\
\end{array}double f(double x, double y, double z) {
double r726835 = x;
double r726836 = y;
double r726837 = z;
double r726838 = r726836 - r726837;
double r726839 = r726835 * r726838;
double r726840 = r726839 / r726836;
return r726840;
}
double f(double x, double y, double z) {
double r726841 = y;
double r726842 = -1071459700543.7744;
bool r726843 = r726841 <= r726842;
double r726844 = -4.3770913436384254e-213;
bool r726845 = r726841 <= r726844;
double r726846 = !r726845;
bool r726847 = r726843 || r726846;
double r726848 = x;
double r726849 = z;
double r726850 = r726841 - r726849;
double r726851 = r726841 / r726850;
double r726852 = 1.0;
double r726853 = pow(r726851, r726852);
double r726854 = r726848 / r726853;
double r726855 = r726848 / r726841;
double r726856 = r726855 * r726850;
double r726857 = r726847 ? r726854 : r726856;
return r726857;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.4 |
|---|---|
| Target | 3.0 |
| Herbie | 3.0 |
if y < -1071459700543.7744 or -4.3770913436384254e-213 < y Initial program 14.2
rmApplied associate-/l*2.6
rmApplied pow12.6
if -1071459700543.7744 < y < -4.3770913436384254e-213Initial program 3.5
rmApplied associate-/l*5.9
rmApplied associate-/r/5.0
Final simplification3.0
herbie shell --seed 2020036 +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))