Average Error: 11.5 → 3.2
Time: 9.6s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.2806 \cdot 10^{-321}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.94900822412695729 \cdot 10^{206}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.94900822412695729 \cdot 10^{206}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\

\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r78930 = a1;
        double r78931 = a2;
        double r78932 = r78930 * r78931;
        double r78933 = b1;
        double r78934 = b2;
        double r78935 = r78933 * r78934;
        double r78936 = r78932 / r78935;
        return r78936;
}

double f(double a1, double a2, double b1, double b2) {
        double r78937 = a1;
        double r78938 = a2;
        double r78939 = r78937 * r78938;
        double r78940 = b1;
        double r78941 = b2;
        double r78942 = r78940 * r78941;
        double r78943 = r78939 / r78942;
        double r78944 = -inf.0;
        bool r78945 = r78943 <= r78944;
        double r78946 = r78937 / r78940;
        double r78947 = r78938 / r78941;
        double r78948 = r78946 * r78947;
        double r78949 = -3.2805958883859e-321;
        bool r78950 = r78943 <= r78949;
        double r78951 = -0.0;
        bool r78952 = r78943 <= r78951;
        double r78953 = r78940 / r78947;
        double r78954 = r78937 / r78953;
        double r78955 = 4.949008224126957e+206;
        bool r78956 = r78943 <= r78955;
        double r78957 = r78956 ? r78943 : r78948;
        double r78958 = r78952 ? r78954 : r78957;
        double r78959 = r78950 ? r78943 : r78958;
        double r78960 = r78945 ? r78948 : r78959;
        return r78960;
}

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.3
Herbie3.2
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 4.949008224126957e+206 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 48.4

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -3.2805958883859e-321 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 4.949008224126957e+206

    1. Initial program 3.9

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

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]
    4. Using strategy rm
    5. Applied associate-*l/12.0

      \[\leadsto \color{blue}{\frac{a1 \cdot \frac{a2}{b2}}{b1}}\]
    6. Using strategy rm
    7. Applied associate-*r/7.2

      \[\leadsto \frac{\color{blue}{\frac{a1 \cdot a2}{b2}}}{b1}\]
    8. Using strategy rm
    9. Applied div-inv7.3

      \[\leadsto \frac{\color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b2}}}{b1}\]
    10. Applied associate-/l*4.0

      \[\leadsto \color{blue}{\frac{a1 \cdot a2}{\frac{b1}{\frac{1}{b2}}}}\]
    11. Simplified3.9

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

    if -3.2805958883859e-321 < (/ (* a1 a2) (* b1 b2)) < -0.0

    1. Initial program 13.2

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

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]
    4. Using strategy rm
    5. Applied associate-*l/3.8

      \[\leadsto \color{blue}{\frac{a1 \cdot \frac{a2}{b2}}{b1}}\]
    6. Using strategy rm
    7. Applied associate-*r/6.3

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{\color{blue}{1 \cdot b2}}}{b1}\]
    10. Applied times-frac3.8

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

      \[\leadsto \color{blue}{\frac{\frac{a1}{1}}{\frac{b1}{\frac{a2}{b2}}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification3.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.2806 \cdot 10^{-321}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.94900822412695729 \cdot 10^{206}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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