\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -3.07688363857671596 \cdot 10^{290}:\\
\;\;\;\;\frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1} \cdot \left(\left(\sqrt[3]{\sqrt[3]{a2} \cdot \sqrt[3]{a2}} \cdot \frac{a1}{b2}\right) \cdot \sqrt[3]{\sqrt[3]{a2}}\right)\\
\mathbf{elif}\;b1 \cdot b2 \le -7.33224774175289027 \cdot 10^{-132}:\\
\;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\
\mathbf{elif}\;b1 \cdot b2 \le 1.1938694317181371 \cdot 10^{-187}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le 6.0946661841822745 \cdot 10^{116}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{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 r211661 = a1;
double r211662 = a2;
double r211663 = r211661 * r211662;
double r211664 = b1;
double r211665 = b2;
double r211666 = r211664 * r211665;
double r211667 = r211663 / r211666;
return r211667;
}
double f(double a1, double a2, double b1, double b2) {
double r211668 = b1;
double r211669 = b2;
double r211670 = r211668 * r211669;
double r211671 = -3.076883638576716e+290;
bool r211672 = r211670 <= r211671;
double r211673 = a2;
double r211674 = cbrt(r211673);
double r211675 = r211674 * r211674;
double r211676 = r211675 / r211668;
double r211677 = cbrt(r211675);
double r211678 = a1;
double r211679 = r211678 / r211669;
double r211680 = r211677 * r211679;
double r211681 = cbrt(r211674);
double r211682 = r211680 * r211681;
double r211683 = r211676 * r211682;
double r211684 = -7.33224774175289e-132;
bool r211685 = r211670 <= r211684;
double r211686 = 1.0;
double r211687 = r211686 / r211670;
double r211688 = r211678 * r211673;
double r211689 = r211687 * r211688;
double r211690 = 1.193869431718137e-187;
bool r211691 = r211670 <= r211690;
double r211692 = r211678 / r211668;
double r211693 = r211673 / r211669;
double r211694 = r211692 * r211693;
double r211695 = 6.0946661841822745e+116;
bool r211696 = r211670 <= r211695;
double r211697 = r211670 / r211673;
double r211698 = r211678 / r211697;
double r211699 = r211686 / r211668;
double r211700 = r211669 / r211673;
double r211701 = r211678 / r211700;
double r211702 = r211699 * r211701;
double r211703 = r211696 ? r211698 : r211702;
double r211704 = r211691 ? r211694 : r211703;
double r211705 = r211685 ? r211689 : r211704;
double r211706 = r211672 ? r211683 : r211705;
return r211706;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.5 |
| Herbie | 6.0 |
if (* b1 b2) < -3.076883638576716e+290Initial program 20.2
rmApplied associate-/l*19.9
rmApplied add-cube-cbrt20.0
Applied times-frac9.2
Applied *-un-lft-identity9.2
Applied times-frac2.9
Simplified2.8
rmApplied add-cube-cbrt2.8
Applied cbrt-prod2.8
Applied *-un-lft-identity2.8
Applied times-frac2.8
Applied *-un-lft-identity2.8
Applied times-frac2.7
Simplified2.7
rmApplied associate-/r/2.9
Applied associate-*r*2.9
if -3.076883638576716e+290 < (* b1 b2) < -7.33224774175289e-132Initial program 4.4
rmApplied associate-/l*3.9
rmApplied div-inv4.0
Applied *-un-lft-identity4.0
Applied times-frac4.5
Simplified4.5
if -7.33224774175289e-132 < (* b1 b2) < 1.193869431718137e-187Initial program 26.6
rmApplied times-frac12.7
if 1.193869431718137e-187 < (* b1 b2) < 6.0946661841822745e+116Initial program 4.1
rmApplied associate-/l*3.4
if 6.0946661841822745e+116 < (* b1 b2) Initial program 12.5
rmApplied associate-/l*13.0
rmApplied *-un-lft-identity13.0
Applied times-frac9.3
Applied *-un-lft-identity9.3
Applied times-frac7.0
Simplified7.0
Final simplification6.0
herbie shell --seed 2020039 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))