Average Error: 11.7 → 2.4
Time: 7.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.7796555794321575 \cdot 10^{-298}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.0937609969207058 \cdot 10^{-296}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.1136204004142319 \cdot 10^{+291}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\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{\frac{a1}{b2}}{\frac{b1}{a2}}\\

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

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

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.1136204004142319 \cdot 10^{+291}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2097759 = a1;
        double r2097760 = a2;
        double r2097761 = r2097759 * r2097760;
        double r2097762 = b1;
        double r2097763 = b2;
        double r2097764 = r2097762 * r2097763;
        double r2097765 = r2097761 / r2097764;
        return r2097765;
}

double f(double a1, double a2, double b1, double b2) {
        double r2097766 = a1;
        double r2097767 = a2;
        double r2097768 = r2097766 * r2097767;
        double r2097769 = b1;
        double r2097770 = b2;
        double r2097771 = r2097769 * r2097770;
        double r2097772 = r2097768 / r2097771;
        double r2097773 = -inf.0;
        bool r2097774 = r2097772 <= r2097773;
        double r2097775 = r2097766 / r2097770;
        double r2097776 = r2097769 / r2097767;
        double r2097777 = r2097775 / r2097776;
        double r2097778 = -1.7796555794321575e-298;
        bool r2097779 = r2097772 <= r2097778;
        double r2097780 = 1.0937609969207058e-296;
        bool r2097781 = r2097772 <= r2097780;
        double r2097782 = r2097767 / r2097770;
        double r2097783 = r2097766 / r2097769;
        double r2097784 = r2097782 * r2097783;
        double r2097785 = 1.1136204004142319e+291;
        bool r2097786 = r2097772 <= r2097785;
        double r2097787 = r2097786 ? r2097772 : r2097777;
        double r2097788 = r2097781 ? r2097784 : r2097787;
        double r2097789 = r2097779 ? r2097772 : r2097788;
        double r2097790 = r2097774 ? r2097777 : r2097789;
        return r2097790;
}

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

Derivation

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

    1. Initial program 58.8

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

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]
    4. Using strategy rm
    5. Applied associate-*l/14.7

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

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

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

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -1.7796555794321575e-298 or 1.0937609969207058e-296 < (/ (* a1 a2) (* b1 b2)) < 1.1136204004142319e+291

    1. Initial program 0.8

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

    if -1.7796555794321575e-298 < (/ (* a1 a2) (* b1 b2)) < 1.0937609969207058e-296

    1. Initial program 13.6

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.7796555794321575 \cdot 10^{-298}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.0937609969207058 \cdot 10^{-296}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.1136204004142319 \cdot 10^{+291}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{\frac{b1}{a2}}\\ \end{array}\]

Reproduce

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

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

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