\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.12735229765193038 \cdot 10^{182}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.0024754663520561 \cdot 10^{-263}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b2}}{b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.48183825434908302 \cdot 10^{-297} \lor \neg \left(a1 \cdot a2 \le 2.32454057704183092 \cdot 10^{123}\right):\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r137539 = a1;
double r137540 = a2;
double r137541 = r137539 * r137540;
double r137542 = b1;
double r137543 = b2;
double r137544 = r137542 * r137543;
double r137545 = r137541 / r137544;
return r137545;
}
double f(double a1, double a2, double b1, double b2) {
double r137546 = a1;
double r137547 = a2;
double r137548 = r137546 * r137547;
double r137549 = -2.1273522976519304e+182;
bool r137550 = r137548 <= r137549;
double r137551 = b1;
double r137552 = b2;
double r137553 = r137552 / r137547;
double r137554 = r137551 * r137553;
double r137555 = r137546 / r137554;
double r137556 = -1.002475466352056e-263;
bool r137557 = r137548 <= r137556;
double r137558 = 1.0;
double r137559 = r137558 / r137552;
double r137560 = r137548 * r137559;
double r137561 = r137560 / r137551;
double r137562 = 5.481838254349083e-297;
bool r137563 = r137548 <= r137562;
double r137564 = 2.324540577041831e+123;
bool r137565 = r137548 <= r137564;
double r137566 = !r137565;
bool r137567 = r137563 || r137566;
double r137568 = r137548 / r137551;
double r137569 = r137568 / r137552;
double r137570 = r137567 ? r137555 : r137569;
double r137571 = r137557 ? r137561 : r137570;
double r137572 = r137550 ? r137555 : r137571;
return r137572;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.0 |
| Herbie | 5.4 |
if (* a1 a2) < -2.1273522976519304e+182 or -1.002475466352056e-263 < (* a1 a2) < 5.481838254349083e-297 or 2.324540577041831e+123 < (* a1 a2) Initial program 22.5
rmApplied associate-/l*11.6
Simplified6.9
if -2.1273522976519304e+182 < (* a1 a2) < -1.002475466352056e-263Initial program 4.8
rmApplied times-frac13.9
rmApplied associate-*l/11.0
rmApplied div-inv11.0
Applied associate-*r*4.6
if 5.481838254349083e-297 < (* a1 a2) < 2.324540577041831e+123Initial program 4.8
rmApplied associate-/r*4.4
Final simplification5.4
herbie shell --seed 2020045 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))