Average Error: 11.1 → 4.9
Time: 12.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.11620674526193 \cdot 10^{+207}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.65549822385213 \cdot 10^{-190}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.2374340498592432 \cdot 10^{-200}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.054460206803236 \cdot 10^{+166}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a2}{\sqrt[3]{b1}}}{b2} \cdot \frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.11620674526193 \cdot 10^{+207}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\

\mathbf{elif}\;a1 \cdot a2 \le -1.65549822385213 \cdot 10^{-190}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\

\mathbf{elif}\;a1 \cdot a2 \le 2.2374340498592432 \cdot 10^{-200}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\

\mathbf{elif}\;a1 \cdot a2 \le 3.054460206803236 \cdot 10^{+166}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{a2}{\sqrt[3]{b1}}}{b2} \cdot \frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2517749 = a1;
        double r2517750 = a2;
        double r2517751 = r2517749 * r2517750;
        double r2517752 = b1;
        double r2517753 = b2;
        double r2517754 = r2517752 * r2517753;
        double r2517755 = r2517751 / r2517754;
        return r2517755;
}

double f(double a1, double a2, double b1, double b2) {
        double r2517756 = a1;
        double r2517757 = a2;
        double r2517758 = r2517756 * r2517757;
        double r2517759 = -2.11620674526193e+207;
        bool r2517760 = r2517758 <= r2517759;
        double r2517761 = b2;
        double r2517762 = b1;
        double r2517763 = r2517757 / r2517762;
        double r2517764 = r2517761 / r2517763;
        double r2517765 = r2517756 / r2517764;
        double r2517766 = -1.65549822385213e-190;
        bool r2517767 = r2517758 <= r2517766;
        double r2517768 = r2517758 / r2517762;
        double r2517769 = r2517768 / r2517761;
        double r2517770 = 2.2374340498592432e-200;
        bool r2517771 = r2517758 <= r2517770;
        double r2517772 = 3.054460206803236e+166;
        bool r2517773 = r2517758 <= r2517772;
        double r2517774 = cbrt(r2517762);
        double r2517775 = r2517757 / r2517774;
        double r2517776 = r2517775 / r2517761;
        double r2517777 = r2517774 * r2517774;
        double r2517778 = r2517756 / r2517777;
        double r2517779 = r2517776 * r2517778;
        double r2517780 = r2517773 ? r2517769 : r2517779;
        double r2517781 = r2517771 ? r2517765 : r2517780;
        double r2517782 = r2517767 ? r2517769 : r2517781;
        double r2517783 = r2517760 ? r2517765 : r2517782;
        return r2517783;
}

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.1
Target11.2
Herbie4.9
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -2.11620674526193e+207 or -1.65549822385213e-190 < (* a1 a2) < 2.2374340498592432e-200

    1. Initial program 18.4

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{\color{blue}{1 \cdot b1}}}{b2}\]
    6. Applied times-frac9.6

      \[\leadsto \frac{\color{blue}{\frac{a1}{1} \cdot \frac{a2}{b1}}}{b2}\]
    7. Applied associate-/l*5.0

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

    if -2.11620674526193e+207 < (* a1 a2) < -1.65549822385213e-190 or 2.2374340498592432e-200 < (* a1 a2) < 3.054460206803236e+166

    1. Initial program 4.2

      \[\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 3.054460206803236e+166 < (* a1 a2)

    1. Initial program 29.0

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

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

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{a2}{\sqrt[3]{b1}}}}{1 \cdot b2}\]
    8. Applied times-frac9.4

      \[\leadsto \color{blue}{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{1} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}}\]
    9. Simplified9.4

      \[\leadsto \color{blue}{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification4.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.11620674526193 \cdot 10^{+207}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.65549822385213 \cdot 10^{-190}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.2374340498592432 \cdot 10^{-200}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.054460206803236 \cdot 10^{+166}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a2}{\sqrt[3]{b1}}}{b2} \cdot \frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}\\ \end{array}\]

Reproduce

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

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

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