\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -4.04801940866511539 \cdot 10^{67}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -1.21348959676995967 \cdot 10^{-198}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -6.21004619463227181 \cdot 10^{-222}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.48851413857169847 \cdot 10^{-277}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le 9.5417218424085528 \cdot 10^{174}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double code(double a1, double a2, double b1, double b2) {
return ((double) (((double) (a1 * a2)) / ((double) (b1 * b2))));
}
double code(double a1, double a2, double b1, double b2) {
double VAR;
if ((((double) (b1 * b2)) <= -4.0480194086651154e+67)) {
VAR = ((double) (a1 / ((double) (((double) (b1 * b2)) / a2))));
} else {
double VAR_1;
if ((((double) (b1 * b2)) <= -1.2134895967699597e-198)) {
VAR_1 = ((double) (1.0 / ((double) (((double) (b1 * b2)) / ((double) (a1 * a2))))));
} else {
double VAR_2;
if ((((double) (b1 * b2)) <= -6.210046194632272e-222)) {
VAR_2 = ((double) (((double) (a1 / b1)) * ((double) (a2 / b2))));
} else {
double VAR_3;
if ((((double) (b1 * b2)) <= 1.4885141385716985e-277)) {
VAR_3 = ((double) (((double) (a1 * ((double) (a2 / b2)))) / b1));
} else {
double VAR_4;
if ((((double) (b1 * b2)) <= 9.541721842408553e+174)) {
VAR_4 = ((double) (a1 / ((double) (((double) (b1 * b2)) / a2))));
} else {
VAR_4 = ((double) (((double) (a1 / b1)) * ((double) (a2 / b2))));
}
VAR_3 = VAR_4;
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.7 |
|---|---|
| Target | 11.6 |
| Herbie | 6.4 |
if (* b1 b2) < -4.04801940866511539e67 or 1.48851413857169847e-277 < (* b1 b2) < 9.5417218424085528e174Initial program 7.4
rmApplied associate-/l*7.1
if -4.04801940866511539e67 < (* b1 b2) < -1.21348959676995967e-198Initial program 3.4
rmApplied clear-num3.6
if -1.21348959676995967e-198 < (* b1 b2) < -6.21004619463227181e-222 or 9.5417218424085528e174 < (* b1 b2) Initial program 13.9
rmApplied times-frac5.8
if -6.21004619463227181e-222 < (* b1 b2) < 1.48851413857169847e-277Initial program 40.8
rmApplied times-frac10.8
rmApplied associate-*l/8.7
Final simplification6.4
herbie shell --seed 2020153
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))