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 r601827 = x;
double r601828 = y;
double r601829 = z;
double r601830 = r601828 / r601829;
double r601831 = t;
double r601832 = r601830 * r601831;
double r601833 = r601832 / r601831;
double r601834 = r601827 * r601833;
return r601834;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r601835 = y;
double r601836 = z;
double r601837 = r601835 / r601836;
double r601838 = -3.0084782615738498e+150;
bool r601839 = r601837 <= r601838;
double r601840 = -9.599167466148357e-156;
bool r601841 = r601837 <= r601840;
double r601842 = 1.3833838083555e-322;
bool r601843 = r601837 <= r601842;
double r601844 = !r601843;
bool r601845 = r601841 || r601844;
double r601846 = !r601845;
bool r601847 = r601839 || r601846;
double r601848 = x;
double r601849 = r601848 * r601835;
double r601850 = r601849 / r601836;
double r601851 = r601836 / r601835;
double r601852 = r601848 / r601851;
double r601853 = r601847 ? r601850 : r601852;
return r601853;
}




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
(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)))