\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -7.352417922295524642864555630196818267831 \cdot 10^{161}:\\
\;\;\;\;\frac{a1}{b2 \cdot \frac{b1}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -2.829997385631305936289034491170991223182 \cdot 10^{-269}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.989903046627509956088269419858881704426 \cdot 10^{-222}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.722753282611232449479087576080636520303 \cdot 10^{105}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r96630 = a1;
double r96631 = a2;
double r96632 = r96630 * r96631;
double r96633 = b1;
double r96634 = b2;
double r96635 = r96633 * r96634;
double r96636 = r96632 / r96635;
return r96636;
}
double f(double a1, double a2, double b1, double b2) {
double r96637 = a1;
double r96638 = a2;
double r96639 = r96637 * r96638;
double r96640 = -7.352417922295525e+161;
bool r96641 = r96639 <= r96640;
double r96642 = b2;
double r96643 = b1;
double r96644 = r96643 / r96638;
double r96645 = r96642 * r96644;
double r96646 = r96637 / r96645;
double r96647 = -2.829997385631306e-269;
bool r96648 = r96639 <= r96647;
double r96649 = 1.0;
double r96650 = r96649 / r96643;
double r96651 = r96639 * r96650;
double r96652 = r96651 / r96642;
double r96653 = 1.98990304662751e-222;
bool r96654 = r96639 <= r96653;
double r96655 = r96642 / r96638;
double r96656 = r96643 * r96655;
double r96657 = r96637 / r96656;
double r96658 = 1.7227532826112324e+105;
bool r96659 = r96639 <= r96658;
double r96660 = r96639 / r96643;
double r96661 = r96660 / r96642;
double r96662 = r96638 / r96643;
double r96663 = r96662 / r96642;
double r96664 = r96637 * r96663;
double r96665 = r96659 ? r96661 : r96664;
double r96666 = r96654 ? r96657 : r96665;
double r96667 = r96648 ? r96652 : r96666;
double r96668 = r96641 ? r96646 : r96667;
return r96668;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.4 |
| Herbie | 5.7 |
if (* a1 a2) < -7.352417922295525e+161Initial program 28.1
rmApplied associate-/r*29.2
rmApplied *-un-lft-identity29.2
Applied times-frac16.4
Applied associate-/l*10.8
Simplified10.4
if -7.352417922295525e+161 < (* a1 a2) < -2.829997385631306e-269Initial program 4.9
rmApplied associate-/r*4.9
rmApplied div-inv5.0
if -2.829997385631306e-269 < (* a1 a2) < 1.98990304662751e-222Initial program 16.2
rmApplied times-frac3.2
rmApplied associate-*l/7.2
rmApplied associate-/l*3.3
Simplified3.5
if 1.98990304662751e-222 < (* a1 a2) < 1.7227532826112324e+105Initial program 4.3
rmApplied associate-/r*3.8
if 1.7227532826112324e+105 < (* a1 a2) Initial program 23.2
rmApplied associate-/r*22.8
rmApplied *-un-lft-identity22.8
Applied *-un-lft-identity22.8
Applied times-frac15.4
Applied times-frac12.6
Simplified12.6
Final simplification5.7
herbie shell --seed 2019350 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))