\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.4931232845681356 \cdot 10^{168}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.0866604942007535 \cdot 10^{-124}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.01600999395086732 \cdot 10^{-257}:\\
\;\;\;\;\frac{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right)}{\sqrt[3]{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}} \cdot \frac{\frac{\sqrt[3]{a2}}{\sqrt[3]{b1}}}{\sqrt[3]{\sqrt[3]{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.59608712487395094 \cdot 10^{126}:\\
\;\;\;\;\frac{1}{\frac{b2}{\frac{a1 \cdot a2}{b1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r180764 = a1;
double r180765 = a2;
double r180766 = r180764 * r180765;
double r180767 = b1;
double r180768 = b2;
double r180769 = r180767 * r180768;
double r180770 = r180766 / r180769;
return r180770;
}
double f(double a1, double a2, double b1, double b2) {
double r180771 = a1;
double r180772 = a2;
double r180773 = r180771 * r180772;
double r180774 = -1.4931232845681356e+168;
bool r180775 = r180773 <= r180774;
double r180776 = b1;
double r180777 = r180771 / r180776;
double r180778 = b2;
double r180779 = r180772 / r180778;
double r180780 = r180777 * r180779;
double r180781 = -2.0866604942007535e-124;
bool r180782 = r180773 <= r180781;
double r180783 = 1.0;
double r180784 = r180773 / r180776;
double r180785 = r180778 / r180784;
double r180786 = r180783 / r180785;
double r180787 = 1.0160099939508673e-257;
bool r180788 = r180773 <= r180787;
double r180789 = cbrt(r180776);
double r180790 = r180789 * r180789;
double r180791 = r180771 / r180790;
double r180792 = cbrt(r180778);
double r180793 = r180792 * r180792;
double r180794 = r180791 / r180793;
double r180795 = cbrt(r180772);
double r180796 = r180795 * r180795;
double r180797 = r180794 * r180796;
double r180798 = cbrt(r180793);
double r180799 = r180797 / r180798;
double r180800 = r180795 / r180789;
double r180801 = cbrt(r180792);
double r180802 = r180800 / r180801;
double r180803 = r180799 * r180802;
double r180804 = 1.596087124873951e+126;
bool r180805 = r180773 <= r180804;
double r180806 = r180772 / r180789;
double r180807 = r180806 / r180792;
double r180808 = r180794 * r180807;
double r180809 = r180805 ? r180786 : r180808;
double r180810 = r180788 ? r180803 : r180809;
double r180811 = r180782 ? r180786 : r180810;
double r180812 = r180775 ? r180780 : r180811;
return r180812;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.3 |
| Herbie | 5.0 |
if (* a1 a2) < -1.4931232845681356e+168Initial program 30.4
rmApplied times-frac12.5
if -1.4931232845681356e+168 < (* a1 a2) < -2.0866604942007535e-124 or 1.0160099939508673e-257 < (* a1 a2) < 1.596087124873951e+126Initial program 4.0
rmApplied associate-/r*3.7
rmApplied clear-num4.1
if -2.0866604942007535e-124 < (* a1 a2) < 1.0160099939508673e-257Initial program 14.7
rmApplied associate-/r*14.7
rmApplied add-cube-cbrt15.0
Applied add-cube-cbrt15.1
Applied times-frac8.4
Applied times-frac3.5
rmApplied add-cube-cbrt3.5
Applied cbrt-prod3.6
Applied *-un-lft-identity3.6
Applied add-cube-cbrt3.6
Applied times-frac3.6
Applied times-frac3.0
Applied associate-*r*3.0
Simplified3.0
if 1.596087124873951e+126 < (* a1 a2) Initial program 25.3
rmApplied associate-/r*27.1
rmApplied add-cube-cbrt27.7
Applied add-cube-cbrt27.8
Applied times-frac17.4
Applied times-frac9.4
Final simplification5.0
herbie shell --seed 2020056 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))