x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -2.588366971627017444543194392656819407323 \cdot 10^{79}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\mathbf{elif}\;\frac{y}{z} \le -7.584778841906227496781487885537839730751 \cdot 10^{-279}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le 0.0:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 1.406079879178553538420301463833789327206 \cdot 10^{177}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot y\\
\end{array}double f(double x, double y, double z, double t) {
double r703835 = x;
double r703836 = y;
double r703837 = z;
double r703838 = r703836 / r703837;
double r703839 = t;
double r703840 = r703838 * r703839;
double r703841 = r703840 / r703839;
double r703842 = r703835 * r703841;
return r703842;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r703843 = y;
double r703844 = z;
double r703845 = r703843 / r703844;
double r703846 = -2.5883669716270174e+79;
bool r703847 = r703845 <= r703846;
double r703848 = x;
double r703849 = r703848 / r703844;
double r703850 = r703849 * r703843;
double r703851 = -7.584778841906227e-279;
bool r703852 = r703845 <= r703851;
double r703853 = r703845 * r703848;
double r703854 = 0.0;
bool r703855 = r703845 <= r703854;
double r703856 = r703848 * r703843;
double r703857 = r703856 / r703844;
double r703858 = 1.4060798791785535e+177;
bool r703859 = r703845 <= r703858;
double r703860 = r703844 / r703843;
double r703861 = r703848 / r703860;
double r703862 = r703859 ? r703861 : r703850;
double r703863 = r703855 ? r703857 : r703862;
double r703864 = r703852 ? r703853 : r703863;
double r703865 = r703847 ? r703850 : r703864;
return r703865;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.7 |
|---|---|
| Target | 1.5 |
| Herbie | 1.1 |
if (/ y z) < -2.5883669716270174e+79 or 1.4060798791785535e+177 < (/ y z) Initial program 31.5
Simplified16.2
rmApplied pow116.2
Applied pow116.2
Applied pow-prod-down16.2
Simplified3.4
rmApplied associate-/l*14.7
rmApplied add-cube-cbrt15.5
Applied *-un-lft-identity15.5
Applied times-frac15.5
Applied associate-/r*5.6
Simplified5.6
rmApplied div-inv5.6
Applied times-frac5.0
Simplified4.0
if -2.5883669716270174e+79 < (/ y z) < -7.584778841906227e-279Initial program 8.4
Simplified0.2
if -7.584778841906227e-279 < (/ y z) < 0.0Initial program 18.3
Simplified15.3
rmApplied pow115.3
Applied pow115.3
Applied pow-prod-down15.3
Simplified0.1
if 0.0 < (/ y z) < 1.4060798791785535e+177Initial program 10.0
Simplified3.4
rmApplied pow13.4
Applied pow13.4
Applied pow-prod-down3.4
Simplified7.3
rmApplied associate-/l*3.6
Final simplification1.1
herbie shell --seed 2019351 +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)))