\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 r1845935 = a1;
double r1845936 = a2;
double r1845937 = r1845935 * r1845936;
double r1845938 = b1;
double r1845939 = b2;
double r1845940 = r1845938 * r1845939;
double r1845941 = r1845937 / r1845940;
return r1845941;
}
double f(double a1, double a2, double b1, double b2) {
double r1845942 = b1;
double r1845943 = b2;
double r1845944 = r1845942 * r1845943;
double r1845945 = -6.898490520999014e+277;
bool r1845946 = r1845944 <= r1845945;
double r1845947 = 1.0;
double r1845948 = r1845947 / r1845942;
double r1845949 = a2;
double r1845950 = r1845947 / r1845949;
double r1845951 = a1;
double r1845952 = r1845951 / r1845943;
double r1845953 = r1845950 / r1845952;
double r1845954 = r1845948 / r1845953;
double r1845955 = -9.006559789728174e-250;
bool r1845956 = r1845944 <= r1845955;
double r1845957 = r1845949 / r1845944;
double r1845958 = r1845951 * r1845957;
double r1845959 = 1.30715975193335e-196;
bool r1845960 = r1845944 <= r1845959;
double r1845961 = r1845951 / r1845942;
double r1845962 = r1845943 / r1845949;
double r1845963 = r1845961 / r1845962;
double r1845964 = 7.676958632971629e+257;
bool r1845965 = r1845944 <= r1845964;
double r1845966 = r1845951 / r1845944;
double r1845967 = r1845966 / r1845950;
double r1845968 = cbrt(r1845949);
double r1845969 = r1845943 / r1845968;
double r1845970 = r1845951 / r1845969;
double r1845971 = r1845968 * r1845968;
double r1845972 = r1845942 / r1845971;
double r1845973 = r1845947 / r1845972;
double r1845974 = r1845970 * r1845973;
double r1845975 = r1845965 ? r1845967 : r1845974;
double r1845976 = r1845960 ? r1845963 : r1845975;
double r1845977 = r1845956 ? r1845958 : r1845976;
double r1845978 = r1845946 ? r1845954 : r1845977;
return r1845978;
}




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 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
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))