\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.414144362639176854803385722786278913018 \cdot 10^{-314} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 1.431802419250923180709933384670076216432 \cdot 10^{298}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r80905 = a1;
double r80906 = a2;
double r80907 = r80905 * r80906;
double r80908 = b1;
double r80909 = b2;
double r80910 = r80908 * r80909;
double r80911 = r80907 / r80910;
return r80911;
}
double f(double a1, double a2, double b1, double b2) {
double r80912 = a1;
double r80913 = a2;
double r80914 = r80912 * r80913;
double r80915 = b1;
double r80916 = b2;
double r80917 = r80915 * r80916;
double r80918 = r80914 / r80917;
double r80919 = -inf.0;
bool r80920 = r80918 <= r80919;
double r80921 = r80913 / r80916;
double r80922 = r80921 / r80915;
double r80923 = r80912 * r80922;
double r80924 = -1.4141443626392e-314;
bool r80925 = r80918 <= r80924;
double r80926 = 0.0;
bool r80927 = r80918 <= r80926;
double r80928 = !r80927;
double r80929 = 1.4318024192509232e+298;
bool r80930 = r80918 <= r80929;
bool r80931 = r80928 && r80930;
bool r80932 = r80925 || r80931;
double r80933 = r80912 / r80915;
double r80934 = r80933 * r80921;
double r80935 = r80932 ? r80918 : r80934;
double r80936 = r80920 ? r80923 : r80935;
return r80936;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.2 |
| Herbie | 2.4 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac11.2
rmApplied div-inv11.3
Applied associate-*l*19.0
Simplified18.9
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.4141443626392e-314 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.4318024192509232e+298Initial program 3.6
if -1.4141443626392e-314 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 1.4318024192509232e+298 < (/ (* a1 a2) (* b1 b2)) Initial program 28.6
rmApplied times-frac3.7
Final simplification2.4
herbie shell --seed 2019325
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))