Average Error: 11.1 → 7.6
Time: 40.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.92230603891585 \cdot 10^{+159}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.3772523069453377 \cdot 10^{-275}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.784788332872323 \cdot 10^{-275}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.92230603891585 \cdot 10^{+159}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6348007 = a1;
        double r6348008 = a2;
        double r6348009 = r6348007 * r6348008;
        double r6348010 = b1;
        double r6348011 = b2;
        double r6348012 = r6348010 * r6348011;
        double r6348013 = r6348009 / r6348012;
        return r6348013;
}

double f(double a1, double a2, double b1, double b2) {
        double r6348014 = a1;
        double r6348015 = a2;
        double r6348016 = r6348014 * r6348015;
        double r6348017 = -1.92230603891585e+159;
        bool r6348018 = r6348016 <= r6348017;
        double r6348019 = b1;
        double r6348020 = r6348015 / r6348019;
        double r6348021 = b2;
        double r6348022 = r6348014 / r6348021;
        double r6348023 = r6348020 * r6348022;
        double r6348024 = -4.3772523069453377e-275;
        bool r6348025 = r6348016 <= r6348024;
        double r6348026 = r6348016 / r6348019;
        double r6348027 = r6348026 / r6348021;
        double r6348028 = 8.784788332872323e-275;
        bool r6348029 = r6348016 <= r6348028;
        double r6348030 = r6348021 / r6348015;
        double r6348031 = r6348014 / r6348030;
        double r6348032 = 1.0;
        double r6348033 = r6348032 / r6348019;
        double r6348034 = r6348031 * r6348033;
        double r6348035 = r6348029 ? r6348034 : r6348027;
        double r6348036 = r6348025 ? r6348027 : r6348035;
        double r6348037 = r6348018 ? r6348023 : r6348036;
        return r6348037;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -1.92230603891585e+159

    1. Initial program 26.7

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

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

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

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

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

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

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

      \[\leadsto 1 \cdot \color{blue}{\left(\frac{a1}{b2} \cdot \frac{a2}{b1}\right)}\]

    if -1.92230603891585e+159 < (* a1 a2) < -4.3772523069453377e-275 or 8.784788332872323e-275 < (* a1 a2)

    1. Initial program 7.2

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

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

    if -4.3772523069453377e-275 < (* a1 a2) < 8.784788332872323e-275

    1. Initial program 18.3

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

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

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

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

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

      \[\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-frac19.2

      \[\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-frac18.9

      \[\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. Simplified18.9

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.92230603891585 \cdot 10^{+159}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.3772523069453377 \cdot 10^{-275}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.784788332872323 \cdot 10^{-275}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019142 +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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