\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.400716313668456 \cdot 10^{-101}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.4490538368871561 \cdot 10^{-99}:\\
\;\;\;\;\frac{\frac{a1}{\frac{b2}{a2}}}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 3.3810800204304724 \cdot 10^{+304}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r2070860 = a1;
double r2070861 = a2;
double r2070862 = r2070860 * r2070861;
double r2070863 = b1;
double r2070864 = b2;
double r2070865 = r2070863 * r2070864;
double r2070866 = r2070862 / r2070865;
return r2070866;
}
double f(double a1, double a2, double b1, double b2) {
double r2070867 = a1;
double r2070868 = a2;
double r2070869 = r2070867 * r2070868;
double r2070870 = -inf.0;
bool r2070871 = r2070869 <= r2070870;
double r2070872 = b1;
double r2070873 = r2070867 / r2070872;
double r2070874 = b2;
double r2070875 = r2070868 / r2070874;
double r2070876 = r2070873 * r2070875;
double r2070877 = -4.400716313668456e-101;
bool r2070878 = r2070869 <= r2070877;
double r2070879 = r2070869 / r2070872;
double r2070880 = r2070879 / r2070874;
double r2070881 = 1.4490538368871561e-99;
bool r2070882 = r2070869 <= r2070881;
double r2070883 = r2070874 / r2070868;
double r2070884 = r2070867 / r2070883;
double r2070885 = r2070884 / r2070872;
double r2070886 = 3.3810800204304724e+304;
bool r2070887 = r2070869 <= r2070886;
double r2070888 = r2070887 ? r2070880 : r2070876;
double r2070889 = r2070882 ? r2070885 : r2070888;
double r2070890 = r2070878 ? r2070880 : r2070889;
double r2070891 = r2070871 ? r2070876 : r2070890;
return r2070891;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 11.2 |
| Herbie | 6.7 |
if (* a1 a2) < -inf.0 or 3.3810800204304724e+304 < (* a1 a2) Initial program 59.7
rmApplied times-frac8.9
if -inf.0 < (* a1 a2) < -4.400716313668456e-101 or 1.4490538368871561e-99 < (* a1 a2) < 3.3810800204304724e+304Initial program 5.2
rmApplied associate-/r*5.1
if -4.400716313668456e-101 < (* a1 a2) < 1.4490538368871561e-99Initial program 11.0
rmApplied associate-/l*8.4
rmApplied *-un-lft-identity8.4
Applied times-frac7.1
Applied *-un-lft-identity7.1
Applied times-frac8.4
Simplified8.4
rmApplied associate-*l/8.4
Simplified8.4
Final simplification6.7
herbie shell --seed 2019155
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))