\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.6303120180766 \cdot 10^{-313}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 3.9080829902179166 \cdot 10^{-292}:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.6301067955831595 \cdot 10^{+297}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r8780582 = a1;
double r8780583 = a2;
double r8780584 = r8780582 * r8780583;
double r8780585 = b1;
double r8780586 = b2;
double r8780587 = r8780585 * r8780586;
double r8780588 = r8780584 / r8780587;
return r8780588;
}
double f(double a1, double a2, double b1, double b2) {
double r8780589 = a1;
double r8780590 = a2;
double r8780591 = r8780589 * r8780590;
double r8780592 = b1;
double r8780593 = b2;
double r8780594 = r8780592 * r8780593;
double r8780595 = r8780591 / r8780594;
double r8780596 = -inf.0;
bool r8780597 = r8780595 <= r8780596;
double r8780598 = r8780589 / r8780593;
double r8780599 = r8780590 / r8780592;
double r8780600 = r8780598 * r8780599;
double r8780601 = -2.6303120180766e-313;
bool r8780602 = r8780595 <= r8780601;
double r8780603 = 3.9080829902179166e-292;
bool r8780604 = r8780595 <= r8780603;
double r8780605 = 1.6301067955831595e+297;
bool r8780606 = r8780595 <= r8780605;
double r8780607 = r8780606 ? r8780595 : r8780600;
double r8780608 = r8780604 ? r8780600 : r8780607;
double r8780609 = r8780602 ? r8780595 : r8780608;
double r8780610 = r8780597 ? r8780600 : r8780609;
return r8780610;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.0 |
|---|---|
| Target | 10.8 |
| Herbie | 2.1 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -2.6303120180766e-313 < (/ (* a1 a2) (* b1 b2)) < 3.9080829902179166e-292 or 1.6301067955831595e+297 < (/ (* a1 a2) (* b1 b2)) Initial program 24.8
rmApplied *-commutative24.8
Applied times-frac3.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -2.6303120180766e-313 or 3.9080829902179166e-292 < (/ (* a1 a2) (* b1 b2)) < 1.6301067955831595e+297Initial program 0.8
Final simplification2.1
herbie shell --seed 2019158
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))