\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;y \le -2.107279811299475 \cdot 10^{-178}:\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\mathbf{elif}\;y \le 1.2762912970477182 \cdot 10^{-154}:\\
\;\;\;\;x - \frac{x \cdot z}{y}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{y - z}{y}\\
\end{array}double f(double x, double y, double z) {
double r33815267 = x;
double r33815268 = y;
double r33815269 = z;
double r33815270 = r33815268 - r33815269;
double r33815271 = r33815267 * r33815270;
double r33815272 = r33815271 / r33815268;
return r33815272;
}
double f(double x, double y, double z) {
double r33815273 = y;
double r33815274 = -2.107279811299475e-178;
bool r33815275 = r33815273 <= r33815274;
double r33815276 = x;
double r33815277 = z;
double r33815278 = r33815273 - r33815277;
double r33815279 = r33815278 / r33815273;
double r33815280 = r33815276 * r33815279;
double r33815281 = 1.2762912970477182e-154;
bool r33815282 = r33815273 <= r33815281;
double r33815283 = r33815276 * r33815277;
double r33815284 = r33815283 / r33815273;
double r33815285 = r33815276 - r33815284;
double r33815286 = r33815282 ? r33815285 : r33815280;
double r33815287 = r33815275 ? r33815280 : r33815286;
return r33815287;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.4 |
|---|---|
| Target | 3.0 |
| Herbie | 2.4 |
if y < -2.107279811299475e-178 or 1.2762912970477182e-154 < y Initial program 12.6
rmApplied *-un-lft-identity12.6
Applied times-frac1.3
Simplified1.3
if -2.107279811299475e-178 < y < 1.2762912970477182e-154Initial program 10.9
Taylor expanded around 0 8.0
Final simplification2.4
herbie shell --seed 2019165
(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))