\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 r132731 = a1;
double r132732 = a2;
double r132733 = r132731 * r132732;
double r132734 = b1;
double r132735 = b2;
double r132736 = r132734 * r132735;
double r132737 = r132733 / r132736;
return r132737;
}
double f(double a1, double a2, double b1, double b2) {
double r132738 = a1;
double r132739 = a2;
double r132740 = r132738 * r132739;
double r132741 = b1;
double r132742 = b2;
double r132743 = r132741 * r132742;
double r132744 = r132740 / r132743;
double r132745 = -inf.0;
bool r132746 = r132744 <= r132745;
double r132747 = -3.721065323848876e-309;
bool r132748 = r132744 <= r132747;
double r132749 = 0.0;
bool r132750 = r132744 <= r132749;
double r132751 = !r132750;
double r132752 = 8.682799991236733e+294;
bool r132753 = r132744 <= r132752;
bool r132754 = r132751 && r132753;
bool r132755 = r132748 || r132754;
double r132756 = !r132755;
bool r132757 = r132746 || r132756;
double r132758 = r132738 / r132741;
double r132759 = r132739 / r132742;
double r132760 = r132758 * r132759;
double r132761 = r132757 ? r132760 : r132744;
return r132761;
}




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 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))