\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -inf.0 \lor \neg \left(a1 \cdot a2 \le -7.997762846890537 \cdot 10^{-173} \lor \neg \left(a1 \cdot a2 \le 7.0474832780855897 \cdot 10^{-306} \lor \neg \left(a1 \cdot a2 \le 1.57373961865377949 \cdot 10^{151}\right)\right)\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\end{array}double code(double a1, double a2, double b1, double b2) {
return ((double) (((double) (a1 * a2)) / ((double) (b1 * b2))));
}
double code(double a1, double a2, double b1, double b2) {
double VAR;
if (((((double) (a1 * a2)) <= -inf.0) || !((((double) (a1 * a2)) <= -7.997762846890537e-173) || !((((double) (a1 * a2)) <= 7.04748327808559e-306) || !(((double) (a1 * a2)) <= 1.5737396186537795e+151))))) {
VAR = ((double) (((double) (a1 / b1)) * ((double) (a2 / b2))));
} else {
VAR = ((double) (((double) (((double) (a1 * a2)) / b1)) / b2));
}
return VAR;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 11.4 |
| Herbie | 5.6 |
if (* a1 a2) < -inf.0 or -7.997762846890537e-173 < (* a1 a2) < 7.04748327808559e-306 or 1.5737396186537795e+151 < (* a1 a2) Initial program 22.2
rmApplied times-frac6.5
if -inf.0 < (* a1 a2) < -7.997762846890537e-173 or 7.04748327808559e-306 < (* a1 a2) < 1.5737396186537795e+151Initial program 5.0
rmApplied associate-/r*5.1
Final simplification5.6
herbie shell --seed 2020131
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))