\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.445905988366334040639285224787715187975 \cdot 10^{244}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\mathbf{elif}\;a1 \cdot a2 \le -9.609520285206617620294914143781194869795 \cdot 10^{-248}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.307444751099091752185460323607005997068 \cdot 10^{-272}:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.182783549232119682193057561507006002421 \cdot 10^{164}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5820720 = a1;
double r5820721 = a2;
double r5820722 = r5820720 * r5820721;
double r5820723 = b1;
double r5820724 = b2;
double r5820725 = r5820723 * r5820724;
double r5820726 = r5820722 / r5820725;
return r5820726;
}
double f(double a1, double a2, double b1, double b2) {
double r5820727 = a1;
double r5820728 = a2;
double r5820729 = r5820727 * r5820728;
double r5820730 = -1.445905988366334e+244;
bool r5820731 = r5820729 <= r5820730;
double r5820732 = b2;
double r5820733 = b1;
double r5820734 = r5820728 / r5820733;
double r5820735 = r5820732 / r5820734;
double r5820736 = r5820727 / r5820735;
double r5820737 = -9.609520285206618e-248;
bool r5820738 = r5820729 <= r5820737;
double r5820739 = 1.0;
double r5820740 = r5820733 / r5820729;
double r5820741 = r5820739 / r5820740;
double r5820742 = r5820741 / r5820732;
double r5820743 = 1.3074447510990918e-272;
bool r5820744 = r5820729 <= r5820743;
double r5820745 = cbrt(r5820732);
double r5820746 = r5820745 * r5820745;
double r5820747 = r5820727 / r5820746;
double r5820748 = r5820734 / r5820745;
double r5820749 = r5820747 * r5820748;
double r5820750 = 1.1827835492321197e+164;
bool r5820751 = r5820729 <= r5820750;
double r5820752 = r5820751 ? r5820742 : r5820736;
double r5820753 = r5820744 ? r5820749 : r5820752;
double r5820754 = r5820738 ? r5820742 : r5820753;
double r5820755 = r5820731 ? r5820736 : r5820754;
return r5820755;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.2 |
|---|---|
| Target | 11.3 |
| Herbie | 5.6 |
if (* a1 a2) < -1.445905988366334e+244 or 1.1827835492321197e+164 < (* a1 a2) Initial program 34.5
rmApplied associate-/r*34.9
rmApplied *-un-lft-identity34.9
Applied times-frac19.7
Applied associate-/l*10.7
if -1.445905988366334e+244 < (* a1 a2) < -9.609520285206618e-248 or 1.3074447510990918e-272 < (* a1 a2) < 1.1827835492321197e+164Initial program 4.8
rmApplied associate-/r*5.0
rmApplied clear-num5.4
if -9.609520285206618e-248 < (* a1 a2) < 1.3074447510990918e-272Initial program 17.2
rmApplied associate-/r*16.2
rmApplied add-cube-cbrt16.4
Applied *-un-lft-identity16.4
Applied times-frac7.5
Applied times-frac2.9
Simplified2.9
Final simplification5.6
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))