x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -4.55389167634140265 \cdot 10^{-149}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\
\mathbf{elif}\;\frac{y}{z} \le 1.4704572909860111 \cdot 10^{-239}:\\
\;\;\;\;\frac{x \cdot y}{z}\\
\mathbf{elif}\;\frac{y}{z} \le 7.35260291402330968 \cdot 10^{277}:\\
\;\;\;\;x \cdot \frac{y}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{z}{x \cdot y}}\\
\end{array}double f(double x, double y, double z, double t) {
double r600482 = x;
double r600483 = y;
double r600484 = z;
double r600485 = r600483 / r600484;
double r600486 = t;
double r600487 = r600485 * r600486;
double r600488 = r600487 / r600486;
double r600489 = r600482 * r600488;
return r600489;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r600490 = y;
double r600491 = z;
double r600492 = r600490 / r600491;
double r600493 = -4.553891676341403e-149;
bool r600494 = r600492 <= r600493;
double r600495 = x;
double r600496 = r600491 / r600490;
double r600497 = r600495 / r600496;
double r600498 = 1.470457290986011e-239;
bool r600499 = r600492 <= r600498;
double r600500 = r600495 * r600490;
double r600501 = r600500 / r600491;
double r600502 = 7.35260291402331e+277;
bool r600503 = r600492 <= r600502;
double r600504 = r600495 * r600492;
double r600505 = 1.0;
double r600506 = r600491 / r600500;
double r600507 = r600505 / r600506;
double r600508 = r600503 ? r600504 : r600507;
double r600509 = r600499 ? r600501 : r600508;
double r600510 = r600494 ? r600497 : r600509;
return r600510;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.7 |
|---|---|
| Target | 1.6 |
| Herbie | 1.8 |
if (/ y z) < -4.553891676341403e-149Initial program 13.5
Simplified5.0
rmApplied associate-*r/9.7
rmApplied associate-/l*4.4
if -4.553891676341403e-149 < (/ y z) < 1.470457290986011e-239Initial program 17.2
Simplified10.4
rmApplied associate-*r/0.9
if 1.470457290986011e-239 < (/ y z) < 7.35260291402331e+277Initial program 9.8
Simplified0.2
if 7.35260291402331e+277 < (/ y z) Initial program 55.4
Simplified49.4
rmApplied associate-*r/0.3
rmApplied clear-num0.4
Final simplification1.8
herbie shell --seed 2020083 +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)))