\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 r157954 = a1;
double r157955 = a2;
double r157956 = r157954 * r157955;
double r157957 = b1;
double r157958 = b2;
double r157959 = r157957 * r157958;
double r157960 = r157956 / r157959;
return r157960;
}
double f(double a1, double a2, double b1, double b2) {
double r157961 = a1;
double r157962 = a2;
double r157963 = r157961 * r157962;
double r157964 = b1;
double r157965 = b2;
double r157966 = r157964 * r157965;
double r157967 = r157963 / r157966;
double r157968 = -5.6299209626543135e+278;
bool r157969 = r157967 <= r157968;
double r157970 = -1.8763565820874656e-287;
bool r157971 = r157967 <= r157970;
double r157972 = 1.1310223173930025e-246;
bool r157973 = r157967 <= r157972;
double r157974 = 5.499100526970725e+259;
bool r157975 = r157967 <= r157974;
double r157976 = !r157975;
bool r157977 = r157973 || r157976;
double r157978 = !r157977;
bool r157979 = r157971 || r157978;
double r157980 = !r157979;
bool r157981 = r157969 || r157980;
double r157982 = r157961 / r157964;
double r157983 = r157965 / r157962;
double r157984 = r157982 / r157983;
double r157985 = r157981 ? r157984 : r157967;
return r157985;
}




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