\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.629920962654313471604012923529225270914 \cdot 10^{278} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.876356582087465582822541150969070437304 \cdot 10^{-287} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.131022317393002517657401368626620541691 \cdot 10^{-246} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.499100526970725014397291959470552919566 \cdot 10^{259}\right)\right)\right):\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r129735 = a1;
double r129736 = a2;
double r129737 = r129735 * r129736;
double r129738 = b1;
double r129739 = b2;
double r129740 = r129738 * r129739;
double r129741 = r129737 / r129740;
return r129741;
}
double f(double a1, double a2, double b1, double b2) {
double r129742 = a1;
double r129743 = a2;
double r129744 = r129742 * r129743;
double r129745 = b1;
double r129746 = b2;
double r129747 = r129745 * r129746;
double r129748 = r129744 / r129747;
double r129749 = -5.6299209626543135e+278;
bool r129750 = r129748 <= r129749;
double r129751 = -1.8763565820874656e-287;
bool r129752 = r129748 <= r129751;
double r129753 = 1.1310223173930025e-246;
bool r129754 = r129748 <= r129753;
double r129755 = 5.499100526970725e+259;
bool r129756 = r129748 <= r129755;
double r129757 = !r129756;
bool r129758 = r129754 || r129757;
double r129759 = !r129758;
bool r129760 = r129752 || r129759;
double r129761 = !r129760;
bool r129762 = r129750 || r129761;
double r129763 = r129742 / r129745;
double r129764 = r129746 / r129743;
double r129765 = r129763 / r129764;
double r129766 = r129762 ? r129765 : r129748;
return r129766;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.5 |
| Herbie | 3.4 |
if (/ (* a1 a2) (* b1 b2)) < -5.6299209626543135e+278 or -1.8763565820874656e-287 < (/ (* a1 a2) (* b1 b2)) < 1.1310223173930025e-246 or 5.499100526970725e+259 < (/ (* a1 a2) (* b1 b2)) Initial program 23.1
rmApplied associate-/r*16.0
rmApplied associate-/l*8.0
rmApplied associate-/r/8.3
Applied associate-/l*6.4
if -5.6299209626543135e+278 < (/ (* a1 a2) (* b1 b2)) < -1.8763565820874656e-287 or 1.1310223173930025e-246 < (/ (* a1 a2) (* b1 b2)) < 5.499100526970725e+259Initial program 0.7
Final simplification3.4
herbie shell --seed 2019353
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))