Average Error: 11.1 → 5.8
Time: 5.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -7.49674299200361345 \cdot 10^{288}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.5748794443415678 \cdot 10^{-93}:\\ \;\;\;\;\frac{a1}{b2 \cdot b1} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 7.07595946555220674 \cdot 10^{-255} \lor \neg \left(b1 \cdot b2 \le 2.41792096653949384 \cdot 10^{269}\right):\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -7.49674299200361345 \cdot 10^{288}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\

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

\mathbf{elif}\;b1 \cdot b2 \le 7.07595946555220674 \cdot 10^{-255} \lor \neg \left(b1 \cdot b2 \le 2.41792096653949384 \cdot 10^{269}\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r133936 = a1;
        double r133937 = a2;
        double r133938 = r133936 * r133937;
        double r133939 = b1;
        double r133940 = b2;
        double r133941 = r133939 * r133940;
        double r133942 = r133938 / r133941;
        return r133942;
}

double f(double a1, double a2, double b1, double b2) {
        double r133943 = b1;
        double r133944 = b2;
        double r133945 = r133943 * r133944;
        double r133946 = -7.496742992003613e+288;
        bool r133947 = r133945 <= r133946;
        double r133948 = a1;
        double r133949 = r133948 / r133944;
        double r133950 = a2;
        double r133951 = r133943 / r133950;
        double r133952 = r133949 / r133951;
        double r133953 = -1.5748794443415678e-93;
        bool r133954 = r133945 <= r133953;
        double r133955 = r133944 * r133943;
        double r133956 = r133948 / r133955;
        double r133957 = r133956 * r133950;
        double r133958 = 7.075959465552207e-255;
        bool r133959 = r133945 <= r133958;
        double r133960 = 2.4179209665394938e+269;
        bool r133961 = r133945 <= r133960;
        double r133962 = !r133961;
        bool r133963 = r133959 || r133962;
        double r133964 = r133948 / r133943;
        double r133965 = r133950 / r133944;
        double r133966 = r133964 * r133965;
        double r133967 = r133950 / r133945;
        double r133968 = r133948 * r133967;
        double r133969 = r133963 ? r133966 : r133968;
        double r133970 = r133954 ? r133957 : r133969;
        double r133971 = r133947 ? r133952 : r133970;
        return r133971;
}

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.6
Herbie5.8
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 4 regimes
  2. if (* b1 b2) < -7.496742992003613e+288

    1. Initial program 18.6

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

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

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

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

    if -7.496742992003613e+288 < (* b1 b2) < -1.5748794443415678e-93

    1. Initial program 4.8

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

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Simplified11.0

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b2 \cdot b1}{a2}}}\]
    7. Applied associate-/r/4.1

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

    if -1.5748794443415678e-93 < (* b1 b2) < 7.075959465552207e-255 or 2.4179209665394938e+269 < (* b1 b2)

    1. Initial program 23.4

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

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

    if 7.075959465552207e-255 < (* b1 b2) < 2.4179209665394938e+269

    1. Initial program 5.0

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

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Simplified11.5

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b2 \cdot b1}{a2}}}\]
    7. Simplified5.6

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

      \[\leadsto \color{blue}{a1 \cdot \frac{1}{\frac{b1 \cdot b2}{a2}}}\]
    10. Simplified5.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -7.49674299200361345 \cdot 10^{288}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.5748794443415678 \cdot 10^{-93}:\\ \;\;\;\;\frac{a1}{b2 \cdot b1} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 7.07595946555220674 \cdot 10^{-255} \lor \neg \left(b1 \cdot b2 \le 2.41792096653949384 \cdot 10^{269}\right):\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \end{array}\]

Reproduce

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

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

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