\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 r159902 = a1;
double r159903 = a2;
double r159904 = r159902 * r159903;
double r159905 = b1;
double r159906 = b2;
double r159907 = r159905 * r159906;
double r159908 = r159904 / r159907;
return r159908;
}
double f(double a1, double a2, double b1, double b2) {
double r159909 = a1;
double r159910 = a2;
double r159911 = r159909 * r159910;
double r159912 = b1;
double r159913 = b2;
double r159914 = r159912 * r159913;
double r159915 = r159911 / r159914;
double r159916 = -5.6299209626543135e+278;
bool r159917 = r159915 <= r159916;
double r159918 = -1.8763565820874656e-287;
bool r159919 = r159915 <= r159918;
double r159920 = 1.1310223173930025e-246;
bool r159921 = r159915 <= r159920;
double r159922 = 5.499100526970725e+259;
bool r159923 = r159915 <= r159922;
double r159924 = !r159923;
bool r159925 = r159921 || r159924;
double r159926 = !r159925;
bool r159927 = r159919 || r159926;
double r159928 = !r159927;
bool r159929 = r159917 || r159928;
double r159930 = r159909 / r159912;
double r159931 = r159913 / r159910;
double r159932 = r159930 / r159931;
double r159933 = r159929 ? r159932 : r159915;
return r159933;
}




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)))