\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.690573134936579355188068325109566692365 \cdot 10^{214}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le -4.337432395097420768246040584874582122161 \cdot 10^{-223}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \frac{\sqrt[3]{a1} \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.239318929799362337308674794520138114567 \cdot 10^{-121}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.135669594507262246668248770076436070243 \cdot 10^{239}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \frac{\sqrt[3]{a1} \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r101925 = a1;
double r101926 = a2;
double r101927 = r101925 * r101926;
double r101928 = b1;
double r101929 = b2;
double r101930 = r101928 * r101929;
double r101931 = r101927 / r101930;
return r101931;
}
double f(double a1, double a2, double b1, double b2) {
double r101932 = b1;
double r101933 = b2;
double r101934 = r101932 * r101933;
double r101935 = -2.6905731349365794e+214;
bool r101936 = r101934 <= r101935;
double r101937 = a1;
double r101938 = a2;
double r101939 = r101938 / r101933;
double r101940 = r101937 * r101939;
double r101941 = r101940 / r101932;
double r101942 = -4.337432395097421e-223;
bool r101943 = r101934 <= r101942;
double r101944 = cbrt(r101937);
double r101945 = r101944 * r101944;
double r101946 = r101944 * r101938;
double r101947 = r101946 / r101934;
double r101948 = r101945 * r101947;
double r101949 = 1.2393189297993623e-121;
bool r101950 = r101934 <= r101949;
double r101951 = r101937 / r101932;
double r101952 = r101939 * r101951;
double r101953 = 1.1356695945072622e+239;
bool r101954 = r101934 <= r101953;
double r101955 = r101954 ? r101948 : r101941;
double r101956 = r101950 ? r101952 : r101955;
double r101957 = r101943 ? r101948 : r101956;
double r101958 = r101936 ? r101941 : r101957;
return r101958;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.3 |
| Herbie | 4.9 |
if (* b1 b2) < -2.6905731349365794e+214 or 1.1356695945072622e+239 < (* b1 b2) Initial program 16.9
Simplified17.1
rmApplied add-cube-cbrt17.3
Applied times-frac7.6
Simplified7.6
rmApplied associate-*l/7.6
Applied associate-*l/7.7
Applied associate-*r/4.3
Simplified4.0
if -2.6905731349365794e+214 < (* b1 b2) < -4.337432395097421e-223 or 1.2393189297993623e-121 < (* b1 b2) < 1.1356695945072622e+239Initial program 4.6
Simplified4.1
rmApplied add-cube-cbrt4.9
Applied times-frac9.9
Simplified9.9
rmApplied pow19.9
Applied pow19.9
Applied pow19.9
Applied pow-prod-down9.9
Applied pow-prod-down9.9
Simplified11.0
rmApplied add-cube-cbrt11.7
Applied associate-*l*11.7
Simplified3.3
if -4.337432395097421e-223 < (* b1 b2) < 1.2393189297993623e-121Initial program 27.1
Simplified28.8
rmApplied *-un-lft-identity28.8
Applied times-frac18.4
Applied associate-*r*11.9
Simplified11.8
Final simplification4.9
herbie shell --seed 2019195 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))