\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 r117934 = a1;
double r117935 = a2;
double r117936 = r117934 * r117935;
double r117937 = b1;
double r117938 = b2;
double r117939 = r117937 * r117938;
double r117940 = r117936 / r117939;
return r117940;
}
double f(double a1, double a2, double b1, double b2) {
double r117941 = a1;
double r117942 = a2;
double r117943 = r117941 * r117942;
double r117944 = b1;
double r117945 = b2;
double r117946 = r117944 * r117945;
double r117947 = r117943 / r117946;
double r117948 = -inf.0;
bool r117949 = r117947 <= r117948;
double r117950 = r117942 / r117945;
double r117951 = r117950 / r117944;
double r117952 = r117941 * r117951;
double r117953 = -1.4141443626392e-314;
bool r117954 = r117947 <= r117953;
double r117955 = 0.0;
bool r117956 = r117947 <= r117955;
double r117957 = !r117956;
double r117958 = 1.4318024192509232e+298;
bool r117959 = r117947 <= r117958;
bool r117960 = r117957 && r117959;
bool r117961 = r117954 || r117960;
double r117962 = r117941 / r117944;
double r117963 = r117962 * r117950;
double r117964 = r117961 ? r117947 : r117963;
double r117965 = r117949 ? r117952 : r117964;
return r117965;
}




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 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))