\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -1.4533836186065774 \cdot 10^{+266}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -5.538350108544492 \cdot 10^{-165}:\\
\;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\
\mathbf{elif}\;b1 \cdot b2 \le 4.167031796800163 \cdot 10^{-112}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \left(\sqrt[3]{a2} \cdot \frac{\sqrt[3]{a2}}{b1}\right)\\
\mathbf{elif}\;b1 \cdot b2 \le 1.387016818262132 \cdot 10^{+154}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \left(\sqrt[3]{a2} \cdot \frac{\sqrt[3]{a2}}{b1}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5595715 = a1;
double r5595716 = a2;
double r5595717 = r5595715 * r5595716;
double r5595718 = b1;
double r5595719 = b2;
double r5595720 = r5595718 * r5595719;
double r5595721 = r5595717 / r5595720;
return r5595721;
}
double f(double a1, double a2, double b1, double b2) {
double r5595722 = b1;
double r5595723 = b2;
double r5595724 = r5595722 * r5595723;
double r5595725 = -1.4533836186065774e+266;
bool r5595726 = r5595724 <= r5595725;
double r5595727 = a1;
double r5595728 = r5595727 / r5595722;
double r5595729 = a2;
double r5595730 = r5595723 / r5595729;
double r5595731 = r5595728 / r5595730;
double r5595732 = -5.538350108544492e-165;
bool r5595733 = r5595724 <= r5595732;
double r5595734 = r5595727 / r5595724;
double r5595735 = r5595734 * r5595729;
double r5595736 = 4.167031796800163e-112;
bool r5595737 = r5595724 <= r5595736;
double r5595738 = cbrt(r5595729);
double r5595739 = r5595723 / r5595738;
double r5595740 = r5595727 / r5595739;
double r5595741 = r5595738 / r5595722;
double r5595742 = r5595738 * r5595741;
double r5595743 = r5595740 * r5595742;
double r5595744 = 1.387016818262132e+154;
bool r5595745 = r5595724 <= r5595744;
double r5595746 = r5595724 / r5595729;
double r5595747 = r5595727 / r5595746;
double r5595748 = r5595745 ? r5595747 : r5595743;
double r5595749 = r5595737 ? r5595743 : r5595748;
double r5595750 = r5595733 ? r5595735 : r5595749;
double r5595751 = r5595726 ? r5595731 : r5595750;
return r5595751;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.0 |
|---|---|
| Target | 10.8 |
| Herbie | 5.2 |
if (* b1 b2) < -1.4533836186065774e+266Initial program 19.4
rmApplied associate-/l*19.0
rmApplied *-un-lft-identity19.0
Applied times-frac8.4
Simplified8.4
rmApplied associate-/r*3.5
if -1.4533836186065774e+266 < (* b1 b2) < -5.538350108544492e-165Initial program 4.6
rmApplied associate-/l*4.8
rmApplied *-un-lft-identity4.8
Applied times-frac11.1
Simplified11.1
rmApplied associate-*r/4.8
Applied associate-/r/4.4
if -5.538350108544492e-165 < (* b1 b2) < 4.167031796800163e-112 or 1.387016818262132e+154 < (* b1 b2) Initial program 18.7
rmApplied associate-/l*18.4
rmApplied add-cube-cbrt18.9
Applied times-frac11.7
Applied *-un-lft-identity11.7
Applied times-frac7.7
Simplified7.5
if 4.167031796800163e-112 < (* b1 b2) < 1.387016818262132e+154Initial program 3.0
rmApplied associate-/l*3.1
rmApplied *-un-lft-identity3.1
Applied times-frac10.5
Simplified10.5
rmApplied associate-*r/3.1
Final simplification5.2
herbie shell --seed 2019129 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))