x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -3.00847826157384981 \cdot 10^{150} \lor \neg \left(\frac{y}{z} \le -9.59916746614835709 \cdot 10^{-156} \lor \neg \left(\frac{y}{z} \le 1.38338 \cdot 10^{-322}\right)\right):\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r511502 = x;
double r511503 = y;
double r511504 = z;
double r511505 = r511503 / r511504;
double r511506 = t;
double r511507 = r511505 * r511506;
double r511508 = r511507 / r511506;
double r511509 = r511502 * r511508;
return r511509;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r511510 = y;
double r511511 = z;
double r511512 = r511510 / r511511;
double r511513 = -3.0084782615738498e+150;
bool r511514 = r511512 <= r511513;
double r511515 = -9.599167466148357e-156;
bool r511516 = r511512 <= r511515;
double r511517 = 1.3833838083555e-322;
bool r511518 = r511512 <= r511517;
double r511519 = !r511518;
bool r511520 = r511516 || r511519;
double r511521 = !r511520;
bool r511522 = r511514 || r511521;
double r511523 = x;
double r511524 = r511523 * r511510;
double r511525 = r511524 / r511511;
double r511526 = r511511 / r511510;
double r511527 = r511523 / r511526;
double r511528 = r511522 ? r511525 : r511527;
return r511528;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.1 |
|---|---|
| Target | 1.4 |
| Herbie | 2.4 |
if (/ y z) < -3.0084782615738498e+150 or -9.599167466148357e-156 < (/ y z) < 1.3833838083555e-322Initial program 21.1
Simplified13.0
rmApplied associate-*r/1.3
if -3.0084782615738498e+150 < (/ y z) < -9.599167466148357e-156 or 1.3833838083555e-322 < (/ y z) Initial program 10.8
Simplified2.9
rmApplied associate-*r/8.5
rmApplied associate-/l*2.9
Final simplification2.4
herbie shell --seed 2020024 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, B"
:precision binary64
:herbie-target
(if (< (/ (* (/ y z) t) t) -1.20672205123045e+245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.907522236933906e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.658954423153415e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e+217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))