x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.45613981804384912 \cdot 10^{278}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -5.31650938160314506 \cdot 10^{-21}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 3.3409790596422747 \cdot 10^{-221}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 7.8490367773301062 \cdot 10^{81}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r633191 = x;
double r633192 = y;
double r633193 = z;
double r633194 = r633192 / r633193;
double r633195 = t;
double r633196 = r633194 * r633195;
double r633197 = r633196 / r633195;
double r633198 = r633191 * r633197;
return r633198;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r633199 = y;
double r633200 = z;
double r633201 = r633199 / r633200;
double r633202 = -1.456139818043849e+278;
bool r633203 = r633201 <= r633202;
double r633204 = x;
double r633205 = r633204 * r633199;
double r633206 = r633205 / r633200;
double r633207 = -5.316509381603145e-21;
bool r633208 = r633201 <= r633207;
double r633209 = r633204 * r633201;
double r633210 = 3.3409790596422747e-221;
bool r633211 = r633201 <= r633210;
double r633212 = 7.849036777330106e+81;
bool r633213 = r633201 <= r633212;
double r633214 = r633200 / r633199;
double r633215 = r633204 / r633214;
double r633216 = r633213 ? r633215 : r633206;
double r633217 = r633211 ? r633206 : r633216;
double r633218 = r633208 ? r633209 : r633217;
double r633219 = r633203 ? r633206 : r633218;
return r633219;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.0 |
|---|---|
| Target | 1.5 |
| Herbie | 2.3 |
if (/ y z) < -1.456139818043849e+278 or -5.316509381603145e-21 < (/ y z) < 3.3409790596422747e-221 or 7.849036777330106e+81 < (/ y z) Initial program 18.6
Simplified10.7
rmApplied associate-*r/3.9
if -1.456139818043849e+278 < (/ y z) < -5.316509381603145e-21Initial program 10.4
Simplified0.3
if 3.3409790596422747e-221 < (/ y z) < 7.849036777330106e+81Initial program 6.3
Simplified0.2
rmApplied associate-*r/10.7
rmApplied associate-/l*0.2
Final simplification2.3
herbie shell --seed 2020020 +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)))