Average Error: 11.7 → 2.3
Time: 9.1s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.6076803324010859 \cdot 10^{-289}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.9543767746540478 \cdot 10^{306}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\

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

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

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

\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r211964 = a1;
        double r211965 = a2;
        double r211966 = r211964 * r211965;
        double r211967 = b1;
        double r211968 = b2;
        double r211969 = r211967 * r211968;
        double r211970 = r211966 / r211969;
        return r211970;
}

double f(double a1, double a2, double b1, double b2) {
        double r211971 = a1;
        double r211972 = a2;
        double r211973 = r211971 * r211972;
        double r211974 = b1;
        double r211975 = b2;
        double r211976 = r211974 * r211975;
        double r211977 = r211973 / r211976;
        double r211978 = -inf.0;
        bool r211979 = r211977 <= r211978;
        double r211980 = cbrt(r211971);
        double r211981 = r211980 * r211980;
        double r211982 = r211981 / r211975;
        double r211983 = r211974 / r211972;
        double r211984 = r211980 / r211983;
        double r211985 = r211982 * r211984;
        double r211986 = -5.607680332401086e-289;
        bool r211987 = r211977 <= r211986;
        double r211988 = 1.0;
        double r211989 = r211976 / r211973;
        double r211990 = r211988 / r211989;
        double r211991 = 0.0;
        bool r211992 = r211977 <= r211991;
        double r211993 = r211971 / r211974;
        double r211994 = r211972 / r211975;
        double r211995 = r211993 * r211994;
        double r211996 = 1.9543767746540478e+306;
        bool r211997 = r211977 <= r211996;
        double r211998 = r211997 ? r211990 : r211985;
        double r211999 = r211992 ? r211995 : r211998;
        double r212000 = r211987 ? r211990 : r211999;
        double r212001 = r211979 ? r211985 : r212000;
        return r212001;
}

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

Derivation

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

    1. Initial program 63.5

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

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

      \[\leadsto \frac{a1}{\color{blue}{b2 \cdot \frac{b1}{a2}}}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt14.7

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -5.607680332401086e-289 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.9543767746540478e+306

    1. Initial program 0.9

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num1.2

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

    if -5.607680332401086e-289 < (/ (* a1 a2) (* b1 b2)) < 0.0

    1. Initial program 13.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.6076803324010859 \cdot 10^{-289}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.9543767746540478 \cdot 10^{306}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b2} \cdot \frac{\sqrt[3]{a1}}{\frac{b1}{a2}}\\ \end{array}\]

Reproduce

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

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

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