\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.331097236289201929838111566058261923975 \cdot 10^{-312} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.759064889840746628621735483350290847538 \cdot 10^{303}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r185570 = a1;
double r185571 = a2;
double r185572 = r185570 * r185571;
double r185573 = b1;
double r185574 = b2;
double r185575 = r185573 * r185574;
double r185576 = r185572 / r185575;
return r185576;
}
double f(double a1, double a2, double b1, double b2) {
double r185577 = a1;
double r185578 = a2;
double r185579 = r185577 * r185578;
double r185580 = b1;
double r185581 = b2;
double r185582 = r185580 * r185581;
double r185583 = r185579 / r185582;
double r185584 = -inf.0;
bool r185585 = r185583 <= r185584;
double r185586 = r185579 / r185580;
double r185587 = r185586 / r185581;
double r185588 = -4.3310972362892e-312;
bool r185589 = r185583 <= r185588;
double r185590 = 0.0;
bool r185591 = r185583 <= r185590;
double r185592 = !r185591;
double r185593 = 2.7590648898407466e+303;
bool r185594 = r185583 <= r185593;
bool r185595 = r185592 && r185594;
bool r185596 = r185589 || r185595;
double r185597 = r185577 / r185580;
double r185598 = r185578 / r185581;
double r185599 = r185597 * r185598;
double r185600 = r185596 ? r185583 : r185599;
double r185601 = r185585 ? r185587 : r185600;
return r185601;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.3 |
| Herbie | 2.6 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied associate-/r*28.8
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.3310972362892e-312 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.7590648898407466e+303Initial program 3.4
if -4.3310972362892e-312 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 2.7590648898407466e+303 < (/ (* a1 a2) (* b1 b2)) Initial program 29.3
rmApplied times-frac3.6
Final simplification2.6
herbie shell --seed 2019194 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))