\frac{x \cdot \left(y - z\right)}{y}\begin{array}{l}
\mathbf{if}\;x \le -1.153708350718751 \cdot 10^{119} \lor \neg \left(x \le 1.7856545451239248 \cdot 10^{-270}\right):\\
\;\;\;\;\frac{x}{\frac{y}{y - z}}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{x \cdot z}{y}\\
\end{array}double f(double x, double y, double z) {
double r541191 = x;
double r541192 = y;
double r541193 = z;
double r541194 = r541192 - r541193;
double r541195 = r541191 * r541194;
double r541196 = r541195 / r541192;
return r541196;
}
double f(double x, double y, double z) {
double r541197 = x;
double r541198 = -1.153708350718751e+119;
bool r541199 = r541197 <= r541198;
double r541200 = 1.7856545451239248e-270;
bool r541201 = r541197 <= r541200;
double r541202 = !r541201;
bool r541203 = r541199 || r541202;
double r541204 = y;
double r541205 = z;
double r541206 = r541204 - r541205;
double r541207 = r541204 / r541206;
double r541208 = r541197 / r541207;
double r541209 = r541197 * r541205;
double r541210 = r541209 / r541204;
double r541211 = r541197 - r541210;
double r541212 = r541203 ? r541208 : r541211;
return r541212;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 12.5 |
|---|---|
| Target | 3.4 |
| Herbie | 2.6 |
if x < -1.153708350718751e+119 or 1.7856545451239248e-270 < x Initial program 16.2
rmApplied associate-/l*2.1
if -1.153708350718751e+119 < x < 1.7856545451239248e-270Initial program 7.3
rmApplied associate-/l*4.6
Taylor expanded around 0 3.3
Final simplification2.6
herbie shell --seed 2019199 +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))