\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.424333575784733165640312865210186090398 \cdot 10^{-300}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{\sqrt[3]{b2}}}{b1}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.173306201668288734588760971486902423604 \cdot 10^{275}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r112705 = a1;
double r112706 = a2;
double r112707 = r112705 * r112706;
double r112708 = b1;
double r112709 = b2;
double r112710 = r112708 * r112709;
double r112711 = r112707 / r112710;
return r112711;
}
double f(double a1, double a2, double b1, double b2) {
double r112712 = a1;
double r112713 = a2;
double r112714 = r112712 * r112713;
double r112715 = b1;
double r112716 = b2;
double r112717 = r112715 * r112716;
double r112718 = r112714 / r112717;
double r112719 = -inf.0;
bool r112720 = r112718 <= r112719;
double r112721 = r112713 / r112716;
double r112722 = r112712 * r112721;
double r112723 = r112722 / r112715;
double r112724 = -2.424333575784733e-300;
bool r112725 = r112718 <= r112724;
double r112726 = 0.0;
bool r112727 = r112718 <= r112726;
double r112728 = cbrt(r112716);
double r112729 = r112728 * r112728;
double r112730 = r112712 / r112729;
double r112731 = r112713 / r112728;
double r112732 = r112731 / r112715;
double r112733 = r112730 * r112732;
double r112734 = 1.1733062016682887e+275;
bool r112735 = r112718 <= r112734;
double r112736 = r112721 / r112715;
double r112737 = r112712 * r112736;
double r112738 = r112735 ? r112718 : r112737;
double r112739 = r112727 ? r112733 : r112738;
double r112740 = r112725 ? r112718 : r112739;
double r112741 = r112720 ? r112723 : r112740;
return r112741;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.1 |
|---|---|
| Target | 11.3 |
| Herbie | 2.9 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied times-frac13.1
rmApplied associate-*l/16.7
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -2.424333575784733e-300 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.1733062016682887e+275Initial program 3.5
if -2.424333575784733e-300 < (/ (* a1 a2) (* b1 b2)) < 0.0Initial program 12.5
rmApplied times-frac2.5
rmApplied div-inv2.5
Applied associate-*l*4.1
Simplified4.1
rmApplied *-un-lft-identity4.1
Applied add-cube-cbrt4.3
Applied *-un-lft-identity4.3
Applied times-frac4.3
Applied times-frac4.2
Applied associate-*r*2.7
Simplified2.7
if 1.1733062016682887e+275 < (/ (* a1 a2) (* b1 b2)) Initial program 54.5
rmApplied times-frac8.8
rmApplied div-inv8.9
Applied associate-*l*14.5
Simplified14.4
Final simplification2.9
herbie shell --seed 2019304 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))