Average Error: 11.5 → 6.3
Time: 12.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.100721826907999911467992266722832772944 \cdot 10^{269}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -3.49050163230014819970050953927807740633 \cdot 10^{-197}:\\ \;\;\;\;\frac{1}{b2 \cdot \frac{b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.96356509626686614052093735349617220019 \cdot 10^{-319}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 9.281447287153549320457976819327732070409 \cdot 10^{192}:\\ \;\;\;\;\frac{1}{b2} \cdot \frac{a1 \cdot a2}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.100721826907999911467992266722832772944 \cdot 10^{269}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

\mathbf{elif}\;a1 \cdot a2 \le -3.49050163230014819970050953927807740633 \cdot 10^{-197}:\\
\;\;\;\;\frac{1}{b2 \cdot \frac{b1}{a1 \cdot a2}}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 9.281447287153549320457976819327732070409 \cdot 10^{192}:\\
\;\;\;\;\frac{1}{b2} \cdot \frac{a1 \cdot a2}{b1}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6041016 = a1;
        double r6041017 = a2;
        double r6041018 = r6041016 * r6041017;
        double r6041019 = b1;
        double r6041020 = b2;
        double r6041021 = r6041019 * r6041020;
        double r6041022 = r6041018 / r6041021;
        return r6041022;
}

double f(double a1, double a2, double b1, double b2) {
        double r6041023 = a1;
        double r6041024 = a2;
        double r6041025 = r6041023 * r6041024;
        double r6041026 = -1.1007218269079999e+269;
        bool r6041027 = r6041025 <= r6041026;
        double r6041028 = b1;
        double r6041029 = r6041023 / r6041028;
        double r6041030 = b2;
        double r6041031 = r6041024 / r6041030;
        double r6041032 = r6041029 * r6041031;
        double r6041033 = -3.490501632300148e-197;
        bool r6041034 = r6041025 <= r6041033;
        double r6041035 = 1.0;
        double r6041036 = r6041028 / r6041025;
        double r6041037 = r6041030 * r6041036;
        double r6041038 = r6041035 / r6041037;
        double r6041039 = 1.9635650962669e-319;
        bool r6041040 = r6041025 <= r6041039;
        double r6041041 = r6041030 * r6041028;
        double r6041042 = r6041041 / r6041024;
        double r6041043 = r6041023 / r6041042;
        double r6041044 = 9.28144728715355e+192;
        bool r6041045 = r6041025 <= r6041044;
        double r6041046 = r6041035 / r6041030;
        double r6041047 = r6041025 / r6041028;
        double r6041048 = r6041046 * r6041047;
        double r6041049 = r6041045 ? r6041048 : r6041032;
        double r6041050 = r6041040 ? r6041043 : r6041049;
        double r6041051 = r6041034 ? r6041038 : r6041050;
        double r6041052 = r6041027 ? r6041032 : r6041051;
        return r6041052;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -1.1007218269079999e+269 or 9.28144728715355e+192 < (* a1 a2)

    1. Initial program 39.2

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

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

    if -1.1007218269079999e+269 < (* a1 a2) < -3.490501632300148e-197

    1. Initial program 4.9

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

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

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

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

    if -3.490501632300148e-197 < (* a1 a2) < 1.9635650962669e-319

    1. Initial program 17.2

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

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

    if 1.9635650962669e-319 < (* a1 a2) < 9.28144728715355e+192

    1. Initial program 5.2

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.100721826907999911467992266722832772944 \cdot 10^{269}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -3.49050163230014819970050953927807740633 \cdot 10^{-197}:\\ \;\;\;\;\frac{1}{b2 \cdot \frac{b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.96356509626686614052093735349617220019 \cdot 10^{-319}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 9.281447287153549320457976819327732070409 \cdot 10^{192}:\\ \;\;\;\;\frac{1}{b2} \cdot \frac{a1 \cdot a2}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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