\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \leq -1.0486969344217753 \cdot 10^{+269}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \leq -7.268695233203412 \cdot 10^{-303}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \leq 0:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \leq 9.191577884368106 \cdot 10^{+278}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}(FPCore (a1 a2 b1 b2) :precision binary64 (/ (* a1 a2) (* b1 b2)))
(FPCore (a1 a2 b1 b2)
:precision binary64
(if (<= (/ (* a1 a2) (* b1 b2)) -1.0486969344217753e+269)
(* (/ a1 b1) (/ a2 b2))
(if (<= (/ (* a1 a2) (* b1 b2)) -7.268695233203412e-303)
(/ (* a1 a2) (* b1 b2))
(if (<= (/ (* a1 a2) (* b1 b2)) 0.0)
(/ a1 (* b1 (/ b2 a2)))
(if (<= (/ (* a1 a2) (* b1 b2)) 9.191577884368106e+278)
(/ (* a1 a2) (* b1 b2))
(* (/ a1 b1) (/ a2 b2)))))))double code(double a1, double a2, double b1, double b2) {
return (((double) (a1 * a2)) / ((double) (b1 * b2)));
}
double code(double a1, double a2, double b1, double b2) {
double tmp;
if (((((double) (a1 * a2)) / ((double) (b1 * b2))) <= -1.0486969344217753e+269)) {
tmp = ((double) ((a1 / b1) * (a2 / b2)));
} else {
double tmp_1;
if (((((double) (a1 * a2)) / ((double) (b1 * b2))) <= -7.268695233203412e-303)) {
tmp_1 = (((double) (a1 * a2)) / ((double) (b1 * b2)));
} else {
double tmp_2;
if (((((double) (a1 * a2)) / ((double) (b1 * b2))) <= 0.0)) {
tmp_2 = (a1 / ((double) (b1 * (b2 / a2))));
} else {
double tmp_3;
if (((((double) (a1 * a2)) / ((double) (b1 * b2))) <= 9.191577884368106e+278)) {
tmp_3 = (((double) (a1 * a2)) / ((double) (b1 * b2)));
} else {
tmp_3 = ((double) ((a1 / b1) * (a2 / b2)));
}
tmp_2 = tmp_3;
}
tmp_1 = tmp_2;
}
tmp = tmp_1;
}
return tmp;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 10.8 |
| Herbie | 3.0 |
if (/ (* a1 a2) (* b1 b2)) < -1.04869693442177529e269 or 9.1915778843681061e278 < (/ (* a1 a2) (* b1 b2)) Initial program Error: 54.3 bits
rmApplied times-fracError: 10.6 bits
if -1.04869693442177529e269 < (/ (* a1 a2) (* b1 b2)) < -7.2686952332034124e-303 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 9.1915778843681061e278Initial program Error: 0.8 bits
if -7.2686952332034124e-303 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program Error: 13.2 bits
rmApplied associate-/l*Error: 7.0 bits
SimplifiedError: 3.8 bits
Final simplificationError: 3.0 bits
herbie shell --seed 2020204
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))