\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \leq -8.065931767366266 \cdot 10^{+116}:\\
\;\;\;\;a1 \cdot \frac{1}{\frac{b1}{a2} \cdot b2}\\
\mathbf{elif}\;a1 \cdot a2 \leq -2.5844249635960764 \cdot 10^{-115}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\
\mathbf{elif}\;a1 \cdot a2 \leq 8.259474310150762 \cdot 10^{-200}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \leq 6.232999595325203 \cdot 10^{+152}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\end{array}(FPCore (a1 a2 b1 b2) :precision binary64 (/ (* a1 a2) (* b1 b2)))
(FPCore (a1 a2 b1 b2)
:precision binary64
(if (<= (* a1 a2) -8.065931767366266e+116)
(* a1 (/ 1.0 (* (/ b1 a2) b2)))
(if (<= (* a1 a2) -2.5844249635960764e-115)
(* (* a1 a2) (/ 1.0 (* b1 b2)))
(if (<= (* a1 a2) 8.259474310150762e-200)
(* (/ a1 b1) (/ a2 b2))
(if (<= (* a1 a2) 6.232999595325203e+152)
(/ (/ (* a1 a2) b2) b1)
(/ a1 (* b1 (/ b2 a2))))))))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)) <= -8.065931767366266e+116)) {
tmp = ((double) (a1 * (1.0 / ((double) ((b1 / a2) * b2)))));
} else {
double tmp_1;
if ((((double) (a1 * a2)) <= -2.5844249635960764e-115)) {
tmp_1 = ((double) (((double) (a1 * a2)) * (1.0 / ((double) (b1 * b2)))));
} else {
double tmp_2;
if ((((double) (a1 * a2)) <= 8.259474310150762e-200)) {
tmp_2 = ((double) ((a1 / b1) * (a2 / b2)));
} else {
double tmp_3;
if ((((double) (a1 * a2)) <= 6.232999595325203e+152)) {
tmp_3 = ((((double) (a1 * a2)) / b2) / b1);
} else {
tmp_3 = (a1 / ((double) (b1 * (b2 / a2))));
}
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.5 |
|---|---|
| Target | 11.4 |
| Herbie | 5.9 |
if (* a1 a2) < -8.06593176736626629e116Initial program Error: 24.4 bits
SimplifiedError: 15.6 bits
rmApplied clear-numError: 15.8 bits
SimplifiedError: 10.8 bits
if -8.06593176736626629e116 < (* a1 a2) < -2.58442496359607641e-115Initial program Error: 3.1 bits
SimplifiedError: 13.2 bits
rmApplied div-invError: 13.3 bits
Applied associate-*r*Error: 3.5 bits
SimplifiedError: 3.5 bits
if -2.58442496359607641e-115 < (* a1 a2) < 8.25947431015076204e-200Initial program Error: 13.2 bits
SimplifiedError: 8.1 bits
rmApplied *-un-lft-identityError: 8.1 bits
Applied times-fracError: 5.5 bits
Applied associate-*r*Error: 5.4 bits
SimplifiedError: 5.4 bits
if 8.25947431015076204e-200 < (* a1 a2) < 6.2329995953252028e152Initial program Error: 4.0 bits
SimplifiedError: 12.0 bits
rmApplied add-cube-cbrtError: 12.7 bits
Applied times-fracError: 14.7 bits
Applied associate-*r*Error: 11.7 bits
SimplifiedError: 11.7 bits
rmApplied associate-*l/Error: 11.7 bits
Applied associate-*l/Error: 6.7 bits
Applied associate-*l/Error: 6.3 bits
SimplifiedError: 4.2 bits
if 6.2329995953252028e152 < (* a1 a2) Initial program Error: 30.3 bits
SimplifiedError: 18.2 bits
rmApplied add-cube-cbrtError: 18.8 bits
Applied times-fracError: 10.6 bits
Applied associate-*r*Error: 13.8 bits
SimplifiedError: 13.8 bits
rmApplied associate-*r/Error: 15.7 bits
SimplifiedError: 15.4 bits
rmApplied associate-/l*Error: 11.9 bits
SimplifiedError: 12.4 bits
Final simplificationError: 5.9 bits
herbie shell --seed 2020203
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))