x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -6.77638088471923947 \cdot 10^{-181} \lor \neg \left(\frac{y}{z} \le 4.4303806781760739 \cdot 10^{-235}\right) \land \frac{y}{z} \le 6.4284572525223976 \cdot 10^{303}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r606239 = x;
double r606240 = y;
double r606241 = z;
double r606242 = r606240 / r606241;
double r606243 = t;
double r606244 = r606242 * r606243;
double r606245 = r606244 / r606243;
double r606246 = r606239 * r606245;
return r606246;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r606247 = y;
double r606248 = z;
double r606249 = r606247 / r606248;
double r606250 = -6.77638088471924e-181;
bool r606251 = r606249 <= r606250;
double r606252 = 4.430380678176074e-235;
bool r606253 = r606249 <= r606252;
double r606254 = !r606253;
double r606255 = 6.428457252522398e+303;
bool r606256 = r606249 <= r606255;
bool r606257 = r606254 && r606256;
bool r606258 = r606251 || r606257;
double r606259 = x;
double r606260 = r606248 / r606247;
double r606261 = r606259 / r606260;
double r606262 = 1.0;
double r606263 = r606248 / r606259;
double r606264 = r606263 / r606247;
double r606265 = r606262 / r606264;
double r606266 = r606258 ? r606261 : r606265;
return r606266;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.8 |
|---|---|
| Target | 1.5 |
| Herbie | 1.9 |
if (/ y z) < -6.77638088471924e-181 or 4.430380678176074e-235 < (/ y z) < 6.428457252522398e+303Initial program 11.8
Simplified2.5
rmApplied associate-*r/8.4
rmApplied associate-/l*2.3
if -6.77638088471924e-181 < (/ y z) < 4.430380678176074e-235 or 6.428457252522398e+303 < (/ y z) Initial program 22.0
Simplified15.0
rmApplied associate-*r/0.9
rmApplied clear-num1.5
Simplified1.1
Final simplification1.9
herbie shell --seed 2020045 +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)))