\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.7796555794321575 \cdot 10^{-298}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.0937609969207058 \cdot 10^{-296}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.1136204004142319 \cdot 10^{+291}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r2097759 = a1;
double r2097760 = a2;
double r2097761 = r2097759 * r2097760;
double r2097762 = b1;
double r2097763 = b2;
double r2097764 = r2097762 * r2097763;
double r2097765 = r2097761 / r2097764;
return r2097765;
}
double f(double a1, double a2, double b1, double b2) {
double r2097766 = a1;
double r2097767 = a2;
double r2097768 = r2097766 * r2097767;
double r2097769 = b1;
double r2097770 = b2;
double r2097771 = r2097769 * r2097770;
double r2097772 = r2097768 / r2097771;
double r2097773 = -inf.0;
bool r2097774 = r2097772 <= r2097773;
double r2097775 = r2097766 / r2097770;
double r2097776 = r2097769 / r2097767;
double r2097777 = r2097775 / r2097776;
double r2097778 = -1.7796555794321575e-298;
bool r2097779 = r2097772 <= r2097778;
double r2097780 = 1.0937609969207058e-296;
bool r2097781 = r2097772 <= r2097780;
double r2097782 = r2097767 / r2097770;
double r2097783 = r2097766 / r2097769;
double r2097784 = r2097782 * r2097783;
double r2097785 = 1.1136204004142319e+291;
bool r2097786 = r2097772 <= r2097785;
double r2097787 = r2097786 ? r2097772 : r2097777;
double r2097788 = r2097781 ? r2097784 : r2097787;
double r2097789 = r2097779 ? r2097772 : r2097788;
double r2097790 = r2097774 ? r2097777 : r2097789;
return r2097790;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.7 |
|---|---|
| Target | 11.4 |
| Herbie | 2.4 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 1.1136204004142319e+291 < (/ (* a1 a2) (* b1 b2)) Initial program 58.8
rmApplied times-frac8.3
rmApplied associate-*l/14.7
rmApplied *-un-lft-identity14.7
Applied associate-/r*14.7
Simplified14.8
rmApplied associate-/l*7.2
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.7796555794321575e-298 or 1.0937609969207058e-296 < (/ (* a1 a2) (* b1 b2)) < 1.1136204004142319e+291Initial program 0.8
if -1.7796555794321575e-298 < (/ (* a1 a2) (* b1 b2)) < 1.0937609969207058e-296Initial program 13.6
rmApplied times-frac3.4
rmApplied *-commutative3.4
Final simplification2.4
herbie shell --seed 2019128
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))