Average Error: 11.1 → 3.2
Time: 4.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -7.06903222862990289 \cdot 10^{-292} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 8.84189546408013918 \cdot 10^{245}:\\ \;\;\;\;\left(\sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}} \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\right) \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\\ \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{a1}{b1} \cdot \frac{a2}{b2}\\

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -7.06903222862990289 \cdot 10^{-292} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 8.84189546408013918 \cdot 10^{245}:\\
\;\;\;\;\left(\sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}} \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\right) \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\\

\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 r103932 = a1;
        double r103933 = a2;
        double r103934 = r103932 * r103933;
        double r103935 = b1;
        double r103936 = b2;
        double r103937 = r103935 * r103936;
        double r103938 = r103934 / r103937;
        return r103938;
}

double f(double a1, double a2, double b1, double b2) {
        double r103939 = a1;
        double r103940 = a2;
        double r103941 = r103939 * r103940;
        double r103942 = b1;
        double r103943 = b2;
        double r103944 = r103942 * r103943;
        double r103945 = r103941 / r103944;
        double r103946 = -inf.0;
        bool r103947 = r103945 <= r103946;
        double r103948 = r103939 / r103942;
        double r103949 = r103940 / r103943;
        double r103950 = r103948 * r103949;
        double r103951 = -7.069032228629903e-292;
        bool r103952 = r103945 <= r103951;
        double r103953 = 0.0;
        bool r103954 = r103945 <= r103953;
        double r103955 = !r103954;
        double r103956 = 8.84189546408014e+245;
        bool r103957 = r103945 <= r103956;
        bool r103958 = r103955 && r103957;
        bool r103959 = r103952 || r103958;
        double r103960 = cbrt(r103945);
        double r103961 = r103960 * r103960;
        double r103962 = r103961 * r103960;
        double r103963 = cbrt(r103939);
        double r103964 = r103963 * r103963;
        double r103965 = r103964 / r103943;
        double r103966 = r103942 / r103940;
        double r103967 = r103963 / r103966;
        double r103968 = r103965 * r103967;
        double r103969 = r103959 ? r103962 : r103968;
        double r103970 = r103947 ? r103950 : r103969;
        return r103970;
}

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

Derivation

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

    1. Initial program 64.0

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -7.069032228629903e-292 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 8.84189546408014e+245

    1. Initial program 0.8

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt1.8

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

    if -7.069032228629903e-292 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 8.84189546408014e+245 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 20.6

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

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

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

      \[\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-frac4.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -7.06903222862990289 \cdot 10^{-292} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 8.84189546408013918 \cdot 10^{245}:\\ \;\;\;\;\left(\sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}} \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\right) \cdot \sqrt[3]{\frac{a1 \cdot a2}{b1 \cdot b2}}\\ \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 2020046 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"
  :precision binary64

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

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