\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -4.21410678211229495 \cdot 10^{303}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le -4.740095961455516 \cdot 10^{-226}:\\
\;\;\;\;\frac{1}{\frac{\frac{b1 \cdot b2}{a1}}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 5.02145443568749372 \cdot 10^{-211}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 1.24212309305567693 \cdot 10^{277}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\
\end{array}double code(double a1, double a2, double b1, double b2) {
return ((a1 * a2) / (b1 * b2));
}
double code(double a1, double a2, double b1, double b2) {
double VAR;
if (((b1 * b2) <= -4.214106782112295e+303)) {
VAR = ((a1 / b1) * (a2 / b2));
} else {
double VAR_1;
if (((b1 * b2) <= -4.740095961455516e-226)) {
VAR_1 = (1.0 / (((b1 * b2) / a1) / a2));
} else {
double VAR_2;
if (((b1 * b2) <= 5.021454435687494e-211)) {
VAR_2 = (((a1 * a2) / b1) / b2);
} else {
double VAR_3;
if (((b1 * b2) <= 1.242123093055677e+277)) {
VAR_3 = ((a1 * a2) * (1.0 / (b1 * b2)));
} else {
VAR_3 = (1.0 / ((b1 / a1) * (b2 / a2)));
}
VAR_2 = VAR_3;
}
VAR_1 = VAR_2;
}
VAR = VAR_1;
}
return VAR;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 11.6 |
| Herbie | 6.0 |
if (* b1 b2) < -4.214106782112295e+303Initial program 21.1
rmApplied times-frac2.0
if -4.214106782112295e+303 < (* b1 b2) < -4.740095961455516e-226Initial program 4.9
rmApplied clear-num5.3
rmApplied associate-/r*5.6
if -4.740095961455516e-226 < (* b1 b2) < 5.021454435687494e-211Initial program 35.2
rmApplied associate-/r*16.2
if 5.021454435687494e-211 < (* b1 b2) < 1.242123093055677e+277Initial program 4.6
rmApplied div-inv4.7
if 1.242123093055677e+277 < (* b1 b2) Initial program 20.6
rmApplied clear-num20.7
rmApplied times-frac2.8
Final simplification6.0
herbie shell --seed 2020105
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))