Average Error: 11.5 → 5.3
Time: 37.2s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus a1

Bits error versus a2

Bits error versus b1

Bits error versus b2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original11.5
Target11.1
Herbie5.3
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -inf.0 or -4.369619197843261e-287 < (* a1 a2) < 2.983618642889101e-209

    1. Initial program 21.8

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied times-frac4.0

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]

    if -inf.0 < (* a1 a2) < -4.369619197843261e-287

    1. Initial program 5.9

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num6.2

      \[\leadsto \color{blue}{\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}}\]

    if 2.983618642889101e-209 < (* a1 a2) < 5.979773594632941e+199

    1. Initial program 4.5

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied associate-/r*4.3

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]

    if 5.979773594632941e+199 < (* a1 a2)

    1. Initial program 34.1

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied times-frac11.5

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity11.5

      \[\leadsto \frac{a1}{\color{blue}{1 \cdot b1}} \cdot \frac{a2}{b2}\]
    6. Applied add-cube-cbrt12.3

      \[\leadsto \frac{\color{blue}{\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \sqrt[3]{a1}}}{1 \cdot b1} \cdot \frac{a2}{b2}\]
    7. Applied times-frac12.3

      \[\leadsto \color{blue}{\left(\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \frac{\sqrt[3]{a1}}{b1}\right)} \cdot \frac{a2}{b2}\]
    8. Applied associate-*l*10.0

      \[\leadsto \color{blue}{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification5.3

    \[\leadsto \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}\]

Reproduce

herbie shell --seed 2019172 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

  :herbie-target
  (* (/ a1 b1) (/ a2 b2))

  (/ (* a1 a2) (* b1 b2)))