\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 r145120 = a1;
double r145121 = a2;
double r145122 = r145120 * r145121;
double r145123 = b1;
double r145124 = b2;
double r145125 = r145123 * r145124;
double r145126 = r145122 / r145125;
return r145126;
}
double f(double a1, double a2, double b1, double b2) {
double r145127 = a1;
double r145128 = a2;
double r145129 = r145127 * r145128;
double r145130 = b1;
double r145131 = b2;
double r145132 = r145130 * r145131;
double r145133 = r145129 / r145132;
double r145134 = -5.6299209626543135e+278;
bool r145135 = r145133 <= r145134;
double r145136 = -1.8763565820874656e-287;
bool r145137 = r145133 <= r145136;
double r145138 = 1.1310223173930025e-246;
bool r145139 = r145133 <= r145138;
double r145140 = 5.499100526970725e+259;
bool r145141 = r145133 <= r145140;
double r145142 = !r145141;
bool r145143 = r145139 || r145142;
double r145144 = !r145143;
bool r145145 = r145137 || r145144;
double r145146 = !r145145;
bool r145147 = r145135 || r145146;
double r145148 = r145127 / r145130;
double r145149 = r145131 / r145128;
double r145150 = r145148 / r145149;
double r145151 = r145147 ? r145150 : r145133;
return r145151;
}




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