Average Error: 11.4 → 3.8
Time: 14.5s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.510660628541362523085079504704820761096 \cdot 10^{-304}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.062070660904123924003450791510692331407 \cdot 10^{231}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5268914 = a1;
        double r5268915 = a2;
        double r5268916 = r5268914 * r5268915;
        double r5268917 = b1;
        double r5268918 = b2;
        double r5268919 = r5268917 * r5268918;
        double r5268920 = r5268916 / r5268919;
        return r5268920;
}

double f(double a1, double a2, double b1, double b2) {
        double r5268921 = a1;
        double r5268922 = a2;
        double r5268923 = r5268921 * r5268922;
        double r5268924 = b1;
        double r5268925 = b2;
        double r5268926 = r5268924 * r5268925;
        double r5268927 = r5268923 / r5268926;
        double r5268928 = -inf.0;
        bool r5268929 = r5268927 <= r5268928;
        double r5268930 = r5268925 / r5268922;
        double r5268931 = r5268921 / r5268930;
        double r5268932 = 1.0;
        double r5268933 = r5268932 / r5268924;
        double r5268934 = r5268931 * r5268933;
        double r5268935 = -1.5106606285413625e-304;
        bool r5268936 = r5268927 <= r5268935;
        double r5268937 = 0.0;
        bool r5268938 = r5268927 <= r5268937;
        double r5268939 = r5268922 / r5268924;
        double r5268940 = r5268939 / r5268925;
        double r5268941 = r5268921 * r5268940;
        double r5268942 = 4.062070660904124e+231;
        bool r5268943 = r5268927 <= r5268942;
        double r5268944 = r5268943 ? r5268927 : r5268934;
        double r5268945 = r5268938 ? r5268941 : r5268944;
        double r5268946 = r5268936 ? r5268927 : r5268945;
        double r5268947 = r5268929 ? r5268934 : r5268946;
        return r5268947;
}

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.4
Target11.1
Herbie3.8
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

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

    1. Initial program 51.9

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied clear-num38.8

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{b1}{a1 \cdot a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity38.8

      \[\leadsto \frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{\color{blue}{1 \cdot b2}}\]
    8. Applied div-inv39.3

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

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

      \[\leadsto \frac{\color{blue}{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{b1} \cdot \frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}}{1 \cdot b2}\]
    11. Applied times-frac40.0

      \[\leadsto \color{blue}{\frac{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{b1}}{1} \cdot \frac{\frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}{b2}}\]
    12. Simplified40.0

      \[\leadsto \color{blue}{\frac{1}{b1}} \cdot \frac{\frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}{b2}\]
    13. Simplified15.8

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.5106606285413625e-304 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 4.062070660904124e+231

    1. Initial program 0.9

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]

    if -1.5106606285413625e-304 < (/ (* a1 a2) (* b1 b2)) < 0.0

    1. Initial program 13.2

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied *-un-lft-identity5.9

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.510660628541362523085079504704820761096 \cdot 10^{-304}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.062070660904123924003450791510692331407 \cdot 10^{231}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \end{array}\]

Reproduce

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

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

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