\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 -6.28254 \cdot 10^{-319} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.16422584143949291 \cdot 10^{-290}\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 6.1160527718578736 \cdot 10^{209}\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 r200730 = a1;
double r200731 = a2;
double r200732 = r200730 * r200731;
double r200733 = b1;
double r200734 = b2;
double r200735 = r200733 * r200734;
double r200736 = r200732 / r200735;
return r200736;
}
double f(double a1, double a2, double b1, double b2) {
double r200737 = a1;
double r200738 = a2;
double r200739 = r200737 * r200738;
double r200740 = b1;
double r200741 = b2;
double r200742 = r200740 * r200741;
double r200743 = r200739 / r200742;
double r200744 = -inf.0;
bool r200745 = r200743 <= r200744;
double r200746 = -6.2825387525173e-319;
bool r200747 = r200743 <= r200746;
double r200748 = 1.1642258414394929e-290;
bool r200749 = r200743 <= r200748;
double r200750 = !r200749;
double r200751 = 6.1160527718578736e+209;
bool r200752 = r200743 <= r200751;
bool r200753 = r200750 && r200752;
bool r200754 = r200747 || r200753;
double r200755 = !r200754;
bool r200756 = r200745 || r200755;
double r200757 = r200737 / r200740;
double r200758 = r200738 / r200741;
double r200759 = r200757 * r200758;
double r200760 = r200756 ? r200759 : r200743;
return r200760;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.6 |
| Herbie | 2.9 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -6.2825387525173e-319 < (/ (* a1 a2) (* b1 b2)) < 1.1642258414394929e-290 or 6.1160527718578736e+209 < (/ (* a1 a2) (* b1 b2)) Initial program 23.1
rmApplied times-frac5.4
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -6.2825387525173e-319 or 1.1642258414394929e-290 < (/ (* a1 a2) (* b1 b2)) < 6.1160527718578736e+209Initial program 0.8
Final simplification2.9
herbie shell --seed 2020046 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))