\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.103031774251489582409915525348219347136 \cdot 10^{241}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.940973758331948228787265542772159085713 \cdot 10^{-276}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.471768101920643639195818820332840731202 \cdot 10^{-213}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.222017195284376264633152553789587622996 \cdot 10^{102}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r115555 = a1;
double r115556 = a2;
double r115557 = r115555 * r115556;
double r115558 = b1;
double r115559 = b2;
double r115560 = r115558 * r115559;
double r115561 = r115557 / r115560;
return r115561;
}
double f(double a1, double a2, double b1, double b2) {
double r115562 = a1;
double r115563 = a2;
double r115564 = r115562 * r115563;
double r115565 = -4.1030317742514896e+241;
bool r115566 = r115564 <= r115565;
double r115567 = b1;
double r115568 = b2;
double r115569 = r115563 / r115568;
double r115570 = r115567 / r115569;
double r115571 = r115562 / r115570;
double r115572 = -1.9409737583319482e-276;
bool r115573 = r115564 <= r115572;
double r115574 = 1.0;
double r115575 = r115567 * r115568;
double r115576 = r115575 / r115564;
double r115577 = r115574 / r115576;
double r115578 = 2.4717681019206436e-213;
bool r115579 = r115564 <= r115578;
double r115580 = 1.2220171952843763e+102;
bool r115581 = r115564 <= r115580;
double r115582 = r115562 / r115567;
double r115583 = r115582 * r115569;
double r115584 = r115581 ? r115577 : r115583;
double r115585 = r115579 ? r115571 : r115584;
double r115586 = r115573 ? r115577 : r115585;
double r115587 = r115566 ? r115571 : r115586;
return r115587;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.8 |
| Herbie | 6.1 |
if (* a1 a2) < -4.1030317742514896e+241 or -1.9409737583319482e-276 < (* a1 a2) < 2.4717681019206436e-213Initial program 21.8
rmApplied clear-num22.0
rmApplied *-un-lft-identity22.0
Applied add-cube-cbrt22.0
Applied times-frac22.0
Simplified22.0
Simplified21.8
rmApplied associate-/l*9.7
rmApplied associate-/l*4.8
if -4.1030317742514896e+241 < (* a1 a2) < -1.9409737583319482e-276 or 2.4717681019206436e-213 < (* a1 a2) < 1.2220171952843763e+102Initial program 4.7
rmApplied clear-num5.0
if 1.2220171952843763e+102 < (* a1 a2) Initial program 21.8
rmApplied times-frac14.3
Final simplification6.1
herbie shell --seed 2019235 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))