\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.023233587679621 \cdot 10^{+251}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.1296092868396195 \cdot 10^{-227}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.887172661957492 \cdot 10^{-160}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.1722925108220896 \cdot 10^{+142}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5875875 = a1;
double r5875876 = a2;
double r5875877 = r5875875 * r5875876;
double r5875878 = b1;
double r5875879 = b2;
double r5875880 = r5875878 * r5875879;
double r5875881 = r5875877 / r5875880;
return r5875881;
}
double f(double a1, double a2, double b1, double b2) {
double r5875882 = a1;
double r5875883 = a2;
double r5875884 = r5875882 * r5875883;
double r5875885 = -3.023233587679621e+251;
bool r5875886 = r5875884 <= r5875885;
double r5875887 = b1;
double r5875888 = r5875882 / r5875887;
double r5875889 = b2;
double r5875890 = r5875883 / r5875889;
double r5875891 = r5875888 * r5875890;
double r5875892 = -2.1296092868396195e-227;
bool r5875893 = r5875884 <= r5875892;
double r5875894 = 1.0;
double r5875895 = r5875894 / r5875887;
double r5875896 = r5875884 * r5875895;
double r5875897 = r5875896 / r5875889;
double r5875898 = 2.887172661957492e-160;
bool r5875899 = r5875884 <= r5875898;
double r5875900 = 2.1722925108220896e+142;
bool r5875901 = r5875884 <= r5875900;
double r5875902 = r5875883 / r5875887;
double r5875903 = r5875882 * r5875902;
double r5875904 = r5875903 / r5875889;
double r5875905 = r5875901 ? r5875897 : r5875904;
double r5875906 = r5875899 ? r5875891 : r5875905;
double r5875907 = r5875893 ? r5875897 : r5875906;
double r5875908 = r5875886 ? r5875891 : r5875907;
return r5875908;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.7 |
| Herbie | 5.7 |
if (* a1 a2) < -3.023233587679621e+251 or -2.1296092868396195e-227 < (* a1 a2) < 2.887172661957492e-160Initial program 17.9
rmApplied times-frac5.2
if -3.023233587679621e+251 < (* a1 a2) < -2.1296092868396195e-227 or 2.887172661957492e-160 < (* a1 a2) < 2.1722925108220896e+142Initial program 4.3
rmApplied associate-/r*4.3
rmApplied *-un-lft-identity4.3
Applied associate-/r*4.3
Simplified11.5
rmApplied div-inv11.6
Applied associate-*r*4.4
if 2.1722925108220896e+142 < (* a1 a2) Initial program 26.0
rmApplied associate-/r*26.9
rmApplied *-un-lft-identity26.9
Applied associate-/r*26.9
Simplified15.9
Final simplification5.7
herbie shell --seed 2019149
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))