\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -4.369619197843261223988403902442698260098 \cdot 10^{-287}:\\
\;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.983618642889101104598899002423951855124 \cdot 10^{-209}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 5.979773594632940735324722698003690676961 \cdot 10^{199}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{a2}{b2} \cdot \frac{\sqrt[3]{a1}}{b1}\right)\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r6583813 = a1;
double r6583814 = a2;
double r6583815 = r6583813 * r6583814;
double r6583816 = b1;
double r6583817 = b2;
double r6583818 = r6583816 * r6583817;
double r6583819 = r6583815 / r6583818;
return r6583819;
}
double f(double a1, double a2, double b1, double b2) {
double r6583820 = a1;
double r6583821 = a2;
double r6583822 = r6583820 * r6583821;
double r6583823 = -inf.0;
bool r6583824 = r6583822 <= r6583823;
double r6583825 = b1;
double r6583826 = r6583820 / r6583825;
double r6583827 = b2;
double r6583828 = r6583821 / r6583827;
double r6583829 = r6583826 * r6583828;
double r6583830 = -4.369619197843261e-287;
bool r6583831 = r6583822 <= r6583830;
double r6583832 = 1.0;
double r6583833 = r6583827 * r6583825;
double r6583834 = r6583833 / r6583822;
double r6583835 = r6583832 / r6583834;
double r6583836 = 2.983618642889101e-209;
bool r6583837 = r6583822 <= r6583836;
double r6583838 = 5.979773594632941e+199;
bool r6583839 = r6583822 <= r6583838;
double r6583840 = r6583822 / r6583825;
double r6583841 = r6583840 / r6583827;
double r6583842 = cbrt(r6583820);
double r6583843 = r6583842 * r6583842;
double r6583844 = r6583842 / r6583825;
double r6583845 = r6583828 * r6583844;
double r6583846 = r6583843 * r6583845;
double r6583847 = r6583839 ? r6583841 : r6583846;
double r6583848 = r6583837 ? r6583829 : r6583847;
double r6583849 = r6583831 ? r6583835 : r6583848;
double r6583850 = r6583824 ? r6583829 : r6583849;
return r6583850;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.5 |
|---|---|
| Target | 11.1 |
| Herbie | 5.3 |
if (* a1 a2) < -inf.0 or -4.369619197843261e-287 < (* a1 a2) < 2.983618642889101e-209Initial program 21.8
rmApplied times-frac4.0
if -inf.0 < (* a1 a2) < -4.369619197843261e-287Initial program 5.9
rmApplied clear-num6.2
if 2.983618642889101e-209 < (* a1 a2) < 5.979773594632941e+199Initial program 4.5
rmApplied associate-/r*4.3
if 5.979773594632941e+199 < (* a1 a2) Initial program 34.1
rmApplied times-frac11.5
rmApplied *-un-lft-identity11.5
Applied add-cube-cbrt12.3
Applied times-frac12.3
Applied associate-*l*10.0
Final simplification5.3
herbie shell --seed 2019172
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))