\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.663951266392983259496348057307607123121 \cdot 10^{282}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.745840766876309597615430800374467180096 \cdot 10^{-301}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.167900665754173440172046964395978388419 \cdot 10^{241}:\\
\;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r79535 = a1;
double r79536 = a2;
double r79537 = r79535 * r79536;
double r79538 = b1;
double r79539 = b2;
double r79540 = r79538 * r79539;
double r79541 = r79537 / r79540;
return r79541;
}
double f(double a1, double a2, double b1, double b2) {
double r79542 = a1;
double r79543 = a2;
double r79544 = r79542 * r79543;
double r79545 = b1;
double r79546 = b2;
double r79547 = r79545 * r79546;
double r79548 = r79544 / r79547;
double r79549 = -5.663951266392983e+282;
bool r79550 = r79548 <= r79549;
double r79551 = r79542 / r79546;
double r79552 = r79551 / r79545;
double r79553 = r79552 * r79543;
double r79554 = -1.7458407668763096e-301;
bool r79555 = r79548 <= r79554;
double r79556 = -0.0;
bool r79557 = r79548 <= r79556;
double r79558 = r79542 / r79545;
double r79559 = r79543 / r79546;
double r79560 = r79558 * r79559;
double r79561 = 1.1679006657541734e+241;
bool r79562 = r79548 <= r79561;
double r79563 = 1.0;
double r79564 = r79563 / r79547;
double r79565 = r79564 * r79544;
double r79566 = r79546 / r79543;
double r79567 = r79545 * r79566;
double r79568 = r79542 / r79567;
double r79569 = r79562 ? r79565 : r79568;
double r79570 = r79557 ? r79560 : r79569;
double r79571 = r79555 ? r79548 : r79570;
double r79572 = r79550 ? r79553 : r79571;
return r79572;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.9 |
| Herbie | 3.4 |
if (/ (* a1 a2) (* b1 b2)) < -5.663951266392983e+282Initial program 49.5
rmApplied associate-/l*29.5
rmApplied *-un-lft-identity29.5
Applied times-frac15.5
Applied *-un-lft-identity15.5
Applied times-frac17.8
Simplified17.8
rmApplied associate-/r/19.1
Applied associate-*r*21.7
Simplified21.6
if -5.663951266392983e+282 < (/ (* a1 a2) (* b1 b2)) < -1.7458407668763096e-301Initial program 1.0
rmApplied associate-/l*7.5
rmApplied *-un-lft-identity7.5
Applied times-frac13.0
Applied *-un-lft-identity13.0
Applied times-frac13.5
Simplified13.5
Taylor expanded around 0 1.0
if -1.7458407668763096e-301 < (/ (* a1 a2) (* b1 b2)) < -0.0Initial program 12.6
rmApplied times-frac2.0
if -0.0 < (/ (* a1 a2) (* b1 b2)) < 1.1679006657541734e+241Initial program 4.8
rmApplied associate-/l*6.5
rmApplied div-inv6.5
Applied *-un-lft-identity6.5
Applied times-frac5.1
Simplified5.1
if 1.1679006657541734e+241 < (/ (* a1 a2) (* b1 b2)) Initial program 48.4
rmApplied associate-/l*40.4
rmApplied *-un-lft-identity40.4
Applied times-frac14.6
Simplified14.6
Final simplification3.4
herbie shell --seed 2019212
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))