\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.258863631489298928829392593475950944213 \cdot 10^{-305}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}\right) \cdot \frac{\sqrt[3]{a2}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 8.744445279068881283499243895354708135096 \cdot 10^{268}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r164869 = a1;
double r164870 = a2;
double r164871 = r164869 * r164870;
double r164872 = b1;
double r164873 = b2;
double r164874 = r164872 * r164873;
double r164875 = r164871 / r164874;
return r164875;
}
double f(double a1, double a2, double b1, double b2) {
double r164876 = a1;
double r164877 = a2;
double r164878 = r164876 * r164877;
double r164879 = b1;
double r164880 = b2;
double r164881 = r164879 * r164880;
double r164882 = r164878 / r164881;
double r164883 = -inf.0;
bool r164884 = r164882 <= r164883;
double r164885 = r164877 / r164880;
double r164886 = r164885 / r164879;
double r164887 = r164876 * r164886;
double r164888 = -1.258863631489299e-305;
bool r164889 = r164882 <= r164888;
double r164890 = 1.0;
double r164891 = r164881 / r164878;
double r164892 = r164890 / r164891;
double r164893 = 0.0;
bool r164894 = r164882 <= r164893;
double r164895 = r164876 / r164879;
double r164896 = cbrt(r164877);
double r164897 = r164896 * r164896;
double r164898 = cbrt(r164880);
double r164899 = r164898 * r164898;
double r164900 = r164897 / r164899;
double r164901 = r164895 * r164900;
double r164902 = r164896 / r164898;
double r164903 = r164901 * r164902;
double r164904 = 8.744445279068881e+268;
bool r164905 = r164882 <= r164904;
double r164906 = cbrt(r164876);
double r164907 = r164906 * r164906;
double r164908 = r164907 / r164890;
double r164909 = r164906 / r164879;
double r164910 = r164909 * r164885;
double r164911 = r164908 * r164910;
double r164912 = r164905 ? r164892 : r164911;
double r164913 = r164894 ? r164903 : r164912;
double r164914 = r164889 ? r164892 : r164913;
double r164915 = r164884 ? r164887 : r164914;
return r164915;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.7 |
| Herbie | 2.6 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac11.6
rmApplied div-inv11.6
Applied associate-*l*13.3
Simplified13.2
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.258863631489299e-305 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 8.744445279068881e+268Initial program 3.7
rmApplied clear-num3.9
if -1.258863631489299e-305 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program 13.4
rmApplied times-frac2.7
rmApplied add-cube-cbrt2.9
Applied add-cube-cbrt2.9
Applied times-frac2.9
Applied associate-*r*2.1
if 8.744445279068881e+268 < (/ (* a1 a2) (* b1 b2)) Initial program 53.4
rmApplied times-frac9.8
rmApplied *-un-lft-identity9.8
Applied add-cube-cbrt10.6
Applied times-frac10.6
Applied associate-*l*11.9
Final simplification2.6
herbie shell --seed 2020002
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))