\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -9.013586456865108 \cdot 10^{-95}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.1062713645792236 \cdot 10^{-164}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 7.866668139775074 \cdot 10^{-256}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.2752046247109955 \cdot 10^{+283}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5681690 = a1;
double r5681691 = a2;
double r5681692 = r5681690 * r5681691;
double r5681693 = b1;
double r5681694 = b2;
double r5681695 = r5681693 * r5681694;
double r5681696 = r5681692 / r5681695;
return r5681696;
}
double f(double a1, double a2, double b1, double b2) {
double r5681697 = a1;
double r5681698 = a2;
double r5681699 = r5681697 * r5681698;
double r5681700 = -2.1038078135654004e+219;
bool r5681701 = r5681699 <= r5681700;
double r5681702 = b1;
double r5681703 = r5681698 / r5681702;
double r5681704 = r5681697 * r5681703;
double r5681705 = b2;
double r5681706 = r5681704 / r5681705;
double r5681707 = -9.013586456865108e-95;
bool r5681708 = r5681699 <= r5681707;
double r5681709 = 1.0;
double r5681710 = r5681705 * r5681702;
double r5681711 = r5681710 / r5681699;
double r5681712 = r5681709 / r5681711;
double r5681713 = -2.1062713645792236e-164;
bool r5681714 = r5681699 <= r5681713;
double r5681715 = r5681699 / r5681702;
double r5681716 = r5681715 / r5681705;
double r5681717 = 7.866668139775074e-256;
bool r5681718 = r5681699 <= r5681717;
double r5681719 = r5681698 / r5681705;
double r5681720 = r5681697 / r5681702;
double r5681721 = r5681719 * r5681720;
double r5681722 = 1.2752046247109955e+283;
bool r5681723 = r5681699 <= r5681722;
double r5681724 = r5681723 ? r5681716 : r5681721;
double r5681725 = r5681718 ? r5681721 : r5681724;
double r5681726 = r5681714 ? r5681716 : r5681725;
double r5681727 = r5681708 ? r5681712 : r5681726;
double r5681728 = r5681701 ? r5681706 : r5681727;
return r5681728;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.4 |
| Herbie | 5.5 |
if (* a1 a2) < -2.1038078135654004e+219Initial program 36.9
rmApplied associate-/r*35.8
rmApplied *-un-lft-identity35.8
Applied times-frac16.9
Simplified16.9
if -2.1038078135654004e+219 < (* a1 a2) < -9.013586456865108e-95Initial program 3.9
rmApplied clear-num4.1
if -9.013586456865108e-95 < (* a1 a2) < -2.1062713645792236e-164 or 7.866668139775074e-256 < (* a1 a2) < 1.2752046247109955e+283Initial program 5.4
rmApplied associate-/r*4.7
if -2.1062713645792236e-164 < (* a1 a2) < 7.866668139775074e-256 or 1.2752046247109955e+283 < (* a1 a2) Initial program 18.7
rmApplied times-frac5.2
Final simplification5.5
herbie shell --seed 2019163 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))