\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.721065323848875903560093256362069823088 \cdot 10^{-309} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 8.682799991236733148187736602059382241979 \cdot 10^{294}\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r105422 = a1;
double r105423 = a2;
double r105424 = r105422 * r105423;
double r105425 = b1;
double r105426 = b2;
double r105427 = r105425 * r105426;
double r105428 = r105424 / r105427;
return r105428;
}
double f(double a1, double a2, double b1, double b2) {
double r105429 = a1;
double r105430 = a2;
double r105431 = r105429 * r105430;
double r105432 = b1;
double r105433 = b2;
double r105434 = r105432 * r105433;
double r105435 = r105431 / r105434;
double r105436 = -inf.0;
bool r105437 = r105435 <= r105436;
double r105438 = -3.721065323848876e-309;
bool r105439 = r105435 <= r105438;
double r105440 = 0.0;
bool r105441 = r105435 <= r105440;
double r105442 = !r105441;
double r105443 = 8.682799991236733e+294;
bool r105444 = r105435 <= r105443;
bool r105445 = r105442 && r105444;
bool r105446 = r105439 || r105445;
double r105447 = !r105446;
bool r105448 = r105437 || r105447;
double r105449 = r105429 / r105432;
double r105450 = r105430 / r105433;
double r105451 = r105449 * r105450;
double r105452 = r105448 ? r105451 : r105435;
return r105452;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.7 |
| Herbie | 2.3 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -3.721065323848876e-309 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 8.682799991236733e+294 < (/ (* a1 a2) (* b1 b2)) Initial program 32.8
rmApplied times-frac5.6
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -3.721065323848876e-309 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 8.682799991236733e+294Initial program 3.5
Final simplification2.3
herbie shell --seed 2019208
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))