\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.693698724261816125107112905711370833358 \cdot 10^{165}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -3.707668888703281368163532340403839839767 \cdot 10^{-122}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.19993479002908504067253615537087606283 \cdot 10^{-139}:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.010390436043786450702687045612742247864 \cdot 10^{241}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\mathbf{else}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r73596 = a1;
double r73597 = a2;
double r73598 = r73596 * r73597;
double r73599 = b1;
double r73600 = b2;
double r73601 = r73599 * r73600;
double r73602 = r73598 / r73601;
return r73602;
}
double f(double a1, double a2, double b1, double b2) {
double r73603 = a1;
double r73604 = a2;
double r73605 = r73603 * r73604;
double r73606 = -8.693698724261816e+165;
bool r73607 = r73605 <= r73606;
double r73608 = b1;
double r73609 = r73603 / r73608;
double r73610 = b2;
double r73611 = r73604 / r73610;
double r73612 = r73609 * r73611;
double r73613 = -3.7076688887032814e-122;
bool r73614 = r73605 <= r73613;
double r73615 = r73605 / r73608;
double r73616 = r73615 / r73610;
double r73617 = 5.199934790029085e-139;
bool r73618 = r73605 <= r73617;
double r73619 = cbrt(r73608);
double r73620 = r73619 * r73619;
double r73621 = r73603 / r73620;
double r73622 = r73604 / r73619;
double r73623 = r73622 / r73610;
double r73624 = r73621 * r73623;
double r73625 = 2.0103904360437865e+241;
bool r73626 = r73605 <= r73625;
double r73627 = 1.0;
double r73628 = r73608 * r73610;
double r73629 = r73628 / r73605;
double r73630 = r73627 / r73629;
double r73631 = r73604 / r73608;
double r73632 = r73631 / r73610;
double r73633 = r73603 * r73632;
double r73634 = r73626 ? r73630 : r73633;
double r73635 = r73618 ? r73624 : r73634;
double r73636 = r73614 ? r73616 : r73635;
double r73637 = r73607 ? r73612 : r73636;
return r73637;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.5 |
| Herbie | 5.3 |
if (* a1 a2) < -8.693698724261816e+165Initial program 29.0
rmApplied times-frac10.9
if -8.693698724261816e+165 < (* a1 a2) < -3.7076688887032814e-122Initial program 3.7
rmApplied associate-/r*3.8
if -3.7076688887032814e-122 < (* a1 a2) < 5.199934790029085e-139Initial program 13.1
rmApplied associate-/r*12.9
rmApplied *-un-lft-identity12.9
Applied add-cube-cbrt13.2
Applied times-frac8.8
Applied times-frac5.3
Simplified5.3
if 5.199934790029085e-139 < (* a1 a2) < 2.0103904360437865e+241Initial program 4.3
rmApplied clear-num4.6
if 2.0103904360437865e+241 < (* a1 a2) Initial program 44.3
rmApplied associate-/r*42.4
rmApplied *-un-lft-identity42.4
Applied *-un-lft-identity42.4
Applied times-frac17.9
Applied times-frac7.4
Simplified7.4
Final simplification5.3
herbie shell --seed 2019347
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))