\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 r180830 = a1;
double r180831 = a2;
double r180832 = r180830 * r180831;
double r180833 = b1;
double r180834 = b2;
double r180835 = r180833 * r180834;
double r180836 = r180832 / r180835;
return r180836;
}
double f(double a1, double a2, double b1, double b2) {
double r180837 = a1;
double r180838 = a2;
double r180839 = r180837 * r180838;
double r180840 = -1.4931232845681356e+168;
bool r180841 = r180839 <= r180840;
double r180842 = b1;
double r180843 = r180837 / r180842;
double r180844 = b2;
double r180845 = r180838 / r180844;
double r180846 = r180843 * r180845;
double r180847 = -2.0866604942007535e-124;
bool r180848 = r180839 <= r180847;
double r180849 = 1.0;
double r180850 = r180839 / r180842;
double r180851 = r180844 / r180850;
double r180852 = r180849 / r180851;
double r180853 = 1.0160099939508673e-257;
bool r180854 = r180839 <= r180853;
double r180855 = cbrt(r180842);
double r180856 = r180855 * r180855;
double r180857 = r180837 / r180856;
double r180858 = cbrt(r180844);
double r180859 = r180858 * r180858;
double r180860 = r180857 / r180859;
double r180861 = cbrt(r180838);
double r180862 = r180861 * r180861;
double r180863 = r180860 * r180862;
double r180864 = cbrt(r180859);
double r180865 = r180863 / r180864;
double r180866 = r180861 / r180855;
double r180867 = cbrt(r180858);
double r180868 = r180866 / r180867;
double r180869 = r180865 * r180868;
double r180870 = 1.596087124873951e+126;
bool r180871 = r180839 <= r180870;
double r180872 = r180838 / r180855;
double r180873 = r180872 / r180858;
double r180874 = r180860 * r180873;
double r180875 = r180871 ? r180852 : r180874;
double r180876 = r180854 ? r180869 : r180875;
double r180877 = r180848 ? r180852 : r180876;
double r180878 = r180841 ? r180846 : r180877;
return r180878;
}




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)))