\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a2 \cdot a1}{b2 \cdot b1} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a2 \cdot a1}{b2 \cdot b1} \le -8.689229871317468393658322463867604866085 \cdot 10^{-264}:\\
\;\;\;\;\frac{a2 \cdot a1}{b2 \cdot b1}\\
\mathbf{elif}\;\frac{a2 \cdot a1}{b2 \cdot b1} \le -0.0:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{elif}\;\frac{a2 \cdot a1}{b2 \cdot b1} \le 9.000995610168164344108674672461018222846 \cdot 10^{241}:\\
\;\;\;\;\frac{a2 \cdot a1}{b2 \cdot b1}\\
\mathbf{else}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5622730 = a1;
double r5622731 = a2;
double r5622732 = r5622730 * r5622731;
double r5622733 = b1;
double r5622734 = b2;
double r5622735 = r5622733 * r5622734;
double r5622736 = r5622732 / r5622735;
return r5622736;
}
double f(double a1, double a2, double b1, double b2) {
double r5622737 = a2;
double r5622738 = a1;
double r5622739 = r5622737 * r5622738;
double r5622740 = b2;
double r5622741 = b1;
double r5622742 = r5622740 * r5622741;
double r5622743 = r5622739 / r5622742;
double r5622744 = -inf.0;
bool r5622745 = r5622743 <= r5622744;
double r5622746 = r5622738 / r5622741;
double r5622747 = r5622737 / r5622740;
double r5622748 = r5622746 * r5622747;
double r5622749 = -8.689229871317468e-264;
bool r5622750 = r5622743 <= r5622749;
double r5622751 = -0.0;
bool r5622752 = r5622743 <= r5622751;
double r5622753 = r5622737 / r5622741;
double r5622754 = r5622753 / r5622740;
double r5622755 = r5622738 * r5622754;
double r5622756 = 9.000995610168164e+241;
bool r5622757 = r5622743 <= r5622756;
double r5622758 = r5622757 ? r5622743 : r5622755;
double r5622759 = r5622752 ? r5622755 : r5622758;
double r5622760 = r5622750 ? r5622743 : r5622759;
double r5622761 = r5622745 ? r5622748 : r5622760;
return r5622761;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.2 |
| Herbie | 3.8 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac11.9
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -8.689229871317468e-264 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 9.000995610168164e+241Initial program 0.9
rmApplied associate-/l*7.1
Taylor expanded around 0 0.9
if -8.689229871317468e-264 < (/ (* a1 a2) (* b1 b2)) < -0.0 or 9.000995610168164e+241 < (/ (* a1 a2) (* b1 b2)) Initial program 20.9
rmApplied associate-/l*15.0
rmApplied div-inv15.2
Simplified7.0
Final simplification3.8
herbie shell --seed 2019200
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))