Average Error: 11.4 → 3.3
Time: 13.3s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.578959191412524580749417655732052670367 \cdot 10^{249}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.642650394240659557808641160626266142058 \cdot 10^{-267}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.397032039407073387947567697695123600538 \cdot 10^{295}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.578959191412524580749417655732052670367 \cdot 10^{249}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r10614009 = a1;
        double r10614010 = a2;
        double r10614011 = r10614009 * r10614010;
        double r10614012 = b1;
        double r10614013 = b2;
        double r10614014 = r10614012 * r10614013;
        double r10614015 = r10614011 / r10614014;
        return r10614015;
}

double f(double a1, double a2, double b1, double b2) {
        double r10614016 = a1;
        double r10614017 = a2;
        double r10614018 = r10614016 * r10614017;
        double r10614019 = b1;
        double r10614020 = b2;
        double r10614021 = r10614019 * r10614020;
        double r10614022 = r10614018 / r10614021;
        double r10614023 = -1.5789591914125246e+249;
        bool r10614024 = r10614022 <= r10614023;
        double r10614025 = r10614016 / r10614019;
        double r10614026 = r10614017 / r10614020;
        double r10614027 = r10614025 * r10614026;
        double r10614028 = -1.6426503942406596e-267;
        bool r10614029 = r10614022 <= r10614028;
        double r10614030 = 0.0;
        bool r10614031 = r10614022 <= r10614030;
        double r10614032 = r10614020 / r10614017;
        double r10614033 = r10614025 / r10614032;
        double r10614034 = 2.3970320394070734e+295;
        bool r10614035 = r10614022 <= r10614034;
        double r10614036 = r10614019 / r10614026;
        double r10614037 = r10614016 / r10614036;
        double r10614038 = r10614035 ? r10614022 : r10614037;
        double r10614039 = r10614031 ? r10614033 : r10614038;
        double r10614040 = r10614029 ? r10614022 : r10614039;
        double r10614041 = r10614024 ? r10614027 : r10614040;
        return r10614041;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -1.5789591914125246e+249

    1. Initial program 42.4

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

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

    if -1.5789591914125246e+249 < (/ (* a1 a2) (* b1 b2)) < -1.6426503942406596e-267 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.3970320394070734e+295

    1. Initial program 0.7

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

    if -1.6426503942406596e-267 < (/ (* a1 a2) (* b1 b2)) < 0.0

    1. Initial program 12.8

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

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

      \[\leadsto \frac{a1}{\frac{b1 \cdot b2}{\color{blue}{1 \cdot a2}}}\]
    6. Applied times-frac4.4

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

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

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

    if 2.3970320394070734e+295 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 61.5

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

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

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

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

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

      \[\leadsto \color{blue}{1} \cdot \frac{a1}{\frac{b1 \cdot b2}{a2}}\]
    9. Using strategy rm
    10. Applied associate-/l*12.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.578959191412524580749417655732052670367 \cdot 10^{249}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.642650394240659557808641160626266142058 \cdot 10^{-267}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.397032039407073387947567697695123600538 \cdot 10^{295}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \end{array}\]

Reproduce

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

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

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