\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -6.898490520999014 \cdot 10^{+277}:\\
\;\;\;\;\frac{\frac{1}{b1}}{\frac{\frac{1}{a2}}{\frac{a1}{b2}}}\\
\mathbf{elif}\;b1 \cdot b2 \le -9.006559789728174 \cdot 10^{-250}:\\
\;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.30715975193335 \cdot 10^{-196}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 7.676958632971629 \cdot 10^{+257}:\\
\;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{1}{\frac{b1}{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r2229920 = a1;
double r2229921 = a2;
double r2229922 = r2229920 * r2229921;
double r2229923 = b1;
double r2229924 = b2;
double r2229925 = r2229923 * r2229924;
double r2229926 = r2229922 / r2229925;
return r2229926;
}
double f(double a1, double a2, double b1, double b2) {
double r2229927 = b1;
double r2229928 = b2;
double r2229929 = r2229927 * r2229928;
double r2229930 = -6.898490520999014e+277;
bool r2229931 = r2229929 <= r2229930;
double r2229932 = 1.0;
double r2229933 = r2229932 / r2229927;
double r2229934 = a2;
double r2229935 = r2229932 / r2229934;
double r2229936 = a1;
double r2229937 = r2229936 / r2229928;
double r2229938 = r2229935 / r2229937;
double r2229939 = r2229933 / r2229938;
double r2229940 = -9.006559789728174e-250;
bool r2229941 = r2229929 <= r2229940;
double r2229942 = r2229934 / r2229929;
double r2229943 = r2229936 * r2229942;
double r2229944 = 1.30715975193335e-196;
bool r2229945 = r2229929 <= r2229944;
double r2229946 = r2229936 / r2229927;
double r2229947 = r2229928 / r2229934;
double r2229948 = r2229946 / r2229947;
double r2229949 = 7.676958632971629e+257;
bool r2229950 = r2229929 <= r2229949;
double r2229951 = r2229936 / r2229929;
double r2229952 = r2229951 / r2229935;
double r2229953 = cbrt(r2229934);
double r2229954 = r2229928 / r2229953;
double r2229955 = r2229936 / r2229954;
double r2229956 = r2229953 * r2229953;
double r2229957 = r2229927 / r2229956;
double r2229958 = r2229932 / r2229957;
double r2229959 = r2229955 * r2229958;
double r2229960 = r2229950 ? r2229952 : r2229959;
double r2229961 = r2229945 ? r2229948 : r2229960;
double r2229962 = r2229941 ? r2229943 : r2229961;
double r2229963 = r2229931 ? r2229939 : r2229962;
return r2229963;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.0 |
| Herbie | 4.9 |
if (* b1 b2) < -6.898490520999014e+277Initial program 20.9
rmApplied associate-/l*20.8
rmApplied div-inv20.8
Applied associate-/r*20.9
rmApplied *-un-lft-identity20.9
Applied times-frac7.2
Applied associate-/l*2.4
if -6.898490520999014e+277 < (* b1 b2) < -9.006559789728174e-250Initial program 5.0
rmApplied associate-/l*5.2
rmApplied div-inv5.2
Applied associate-/r*4.9
rmApplied *-un-lft-identity4.9
Applied add-cube-cbrt4.9
Applied times-frac4.9
Applied div-inv4.9
Applied times-frac5.3
Simplified5.3
Simplified5.2
if -9.006559789728174e-250 < (* b1 b2) < 1.30715975193335e-196Initial program 35.6
rmApplied associate-/l*35.7
rmApplied *-un-lft-identity35.7
Applied times-frac17.2
Applied associate-/r*10.0
Simplified10.0
if 1.30715975193335e-196 < (* b1 b2) < 7.676958632971629e+257Initial program 5.0
rmApplied associate-/l*4.7
rmApplied div-inv4.7
Applied associate-/r*4.3
if 7.676958632971629e+257 < (* b1 b2) Initial program 18.3
rmApplied associate-/l*18.4
rmApplied add-cube-cbrt18.5
Applied times-frac7.9
Applied *-un-lft-identity7.9
Applied times-frac2.4
Final simplification4.9
herbie shell --seed 2019153 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))