\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -3.78185687302351595353600927911780875218 \cdot 10^{144}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le -4.150210671513833606732172966148884455885 \cdot 10^{-228}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\
\mathbf{elif}\;b1 \cdot b2 \le 4.343720045836759282443581250746346844563 \cdot 10^{-182}:\\
\;\;\;\;\frac{1}{b1} \cdot \left(\frac{a1}{b2} \cdot a2\right)\\
\mathbf{elif}\;b1 \cdot b2 \le 4.542196225721951094431610617285657897859 \cdot 10^{280}:\\
\;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r87675 = a1;
double r87676 = a2;
double r87677 = r87675 * r87676;
double r87678 = b1;
double r87679 = b2;
double r87680 = r87678 * r87679;
double r87681 = r87677 / r87680;
return r87681;
}
double f(double a1, double a2, double b1, double b2) {
double r87682 = b1;
double r87683 = b2;
double r87684 = r87682 * r87683;
double r87685 = -3.781856873023516e+144;
bool r87686 = r87684 <= r87685;
double r87687 = 1.0;
double r87688 = r87687 / r87682;
double r87689 = a1;
double r87690 = a2;
double r87691 = r87683 / r87690;
double r87692 = r87689 / r87691;
double r87693 = r87688 * r87692;
double r87694 = -4.1502106715138336e-228;
bool r87695 = r87684 <= r87694;
double r87696 = r87684 / r87690;
double r87697 = r87689 / r87696;
double r87698 = 4.343720045836759e-182;
bool r87699 = r87684 <= r87698;
double r87700 = r87689 / r87683;
double r87701 = r87700 * r87690;
double r87702 = r87688 * r87701;
double r87703 = 4.542196225721951e+280;
bool r87704 = r87684 <= r87703;
double r87705 = r87689 / r87684;
double r87706 = r87705 * r87690;
double r87707 = r87704 ? r87706 : r87693;
double r87708 = r87699 ? r87702 : r87707;
double r87709 = r87695 ? r87697 : r87708;
double r87710 = r87686 ? r87693 : r87709;
return r87710;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.2 |
| Herbie | 5.3 |
if (* b1 b2) < -3.781856873023516e+144 or 4.542196225721951e+280 < (* b1 b2) Initial program 16.9
rmApplied associate-/l*16.2
rmApplied *-un-lft-identity16.2
Applied times-frac8.9
Applied *-un-lft-identity8.9
Applied times-frac6.1
Simplified6.1
if -3.781856873023516e+144 < (* b1 b2) < -4.1502106715138336e-228Initial program 4.4
rmApplied associate-/l*4.1
rmApplied associate-/r/4.2
rmApplied *-un-lft-identity4.2
Applied associate-*l*4.2
Simplified4.1
if -4.1502106715138336e-228 < (* b1 b2) < 4.343720045836759e-182Initial program 31.3
rmApplied associate-/l*31.9
rmApplied associate-/r/31.9
rmApplied *-un-lft-identity31.9
Applied times-frac17.4
Applied associate-*l*8.9
if 4.343720045836759e-182 < (* b1 b2) < 4.542196225721951e+280Initial program 5.3
rmApplied associate-/l*4.6
rmApplied associate-/r/4.4
Final simplification5.3
herbie shell --seed 2019209 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))