x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -4.539793361071769873969043675808442911102 \cdot 10^{214}:\\
\;\;\;\;y \cdot \frac{x}{z}\\
\mathbf{elif}\;\frac{y}{z} \le -2.530604856090351627042526853504735687815 \cdot 10^{-166}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{elif}\;\frac{y}{z} \le 6.053074699504574675208589942494399087398 \cdot 10^{-63}:\\
\;\;\;\;\frac{y}{\frac{z}{x}}\\
\mathbf{elif}\;\frac{y}{z} \le 6.289758256242324172285873340578120865516 \cdot 10^{161}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot x}{z}\\
\end{array}double f(double x, double y, double z, double t) {
double r383724 = x;
double r383725 = y;
double r383726 = z;
double r383727 = r383725 / r383726;
double r383728 = t;
double r383729 = r383727 * r383728;
double r383730 = r383729 / r383728;
double r383731 = r383724 * r383730;
return r383731;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r383732 = y;
double r383733 = z;
double r383734 = r383732 / r383733;
double r383735 = -4.53979336107177e+214;
bool r383736 = r383734 <= r383735;
double r383737 = x;
double r383738 = r383737 / r383733;
double r383739 = r383732 * r383738;
double r383740 = -2.5306048560903516e-166;
bool r383741 = r383734 <= r383740;
double r383742 = r383734 * r383737;
double r383743 = 6.053074699504575e-63;
bool r383744 = r383734 <= r383743;
double r383745 = r383733 / r383737;
double r383746 = r383732 / r383745;
double r383747 = 6.289758256242324e+161;
bool r383748 = r383734 <= r383747;
double r383749 = r383732 * r383737;
double r383750 = r383749 / r383733;
double r383751 = r383748 ? r383742 : r383750;
double r383752 = r383744 ? r383746 : r383751;
double r383753 = r383741 ? r383742 : r383752;
double r383754 = r383736 ? r383739 : r383753;
return r383754;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 14.5 |
|---|---|
| Target | 1.4 |
| Herbie | 1.2 |
if (/ y z) < -4.53979336107177e+214Initial program 42.7
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied times-frac0.4
Simplified0.4
if -4.53979336107177e+214 < (/ y z) < -2.5306048560903516e-166 or 6.053074699504575e-63 < (/ y z) < 6.289758256242324e+161Initial program 7.3
Simplified11.4
rmApplied associate-/l*10.3
rmApplied associate-/r/0.2
if -2.5306048560903516e-166 < (/ y z) < 6.053074699504575e-63Initial program 14.9
Simplified2.5
rmApplied associate-/l*2.2
if 6.289758256242324e+161 < (/ y z) Initial program 34.1
Simplified2.3
Final simplification1.2
herbie shell --seed 2019305 +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.20672205123045005e245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.90752223693390633e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.65895442315341522e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))