Average Error: 11.2 → 5.3
Time: 24.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.635198921460311 \cdot 10^{+222}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.151349519826297 \cdot 10^{-252}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.5035993978499362 \cdot 10^{-275}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2588973641699893 \cdot 10^{+212}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.635198921460311 \cdot 10^{+222}:\\
\;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5831869 = a1;
        double r5831870 = a2;
        double r5831871 = r5831869 * r5831870;
        double r5831872 = b1;
        double r5831873 = b2;
        double r5831874 = r5831872 * r5831873;
        double r5831875 = r5831871 / r5831874;
        return r5831875;
}

double f(double a1, double a2, double b1, double b2) {
        double r5831876 = a1;
        double r5831877 = a2;
        double r5831878 = r5831876 * r5831877;
        double r5831879 = -4.635198921460311e+222;
        bool r5831880 = r5831878 <= r5831879;
        double r5831881 = b1;
        double r5831882 = r5831877 / r5831881;
        double r5831883 = b2;
        double r5831884 = r5831876 / r5831883;
        double r5831885 = r5831882 * r5831884;
        double r5831886 = -4.151349519826297e-252;
        bool r5831887 = r5831878 <= r5831886;
        double r5831888 = r5831878 / r5831883;
        double r5831889 = r5831888 / r5831881;
        double r5831890 = 2.5035993978499362e-275;
        bool r5831891 = r5831878 <= r5831890;
        double r5831892 = 1.2588973641699893e+212;
        bool r5831893 = r5831878 <= r5831892;
        double r5831894 = r5831893 ? r5831889 : r5831885;
        double r5831895 = r5831891 ? r5831885 : r5831894;
        double r5831896 = r5831887 ? r5831889 : r5831895;
        double r5831897 = r5831880 ? r5831885 : r5831896;
        return r5831897;
}

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

Derivation

  1. Split input into 2 regimes
  2. if (* a1 a2) < -4.635198921460311e+222 or -4.151349519826297e-252 < (* a1 a2) < 2.5035993978499362e-275 or 1.2588973641699893e+212 < (* a1 a2)

    1. Initial program 25.0

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

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

      \[\leadsto \color{blue}{\frac{a1 \cdot \frac{a2}{b2}}{b1}}\]
    6. Using strategy rm
    7. Applied div-inv11.6

      \[\leadsto \color{blue}{\left(a1 \cdot \frac{a2}{b2}\right) \cdot \frac{1}{b1}}\]
    8. Using strategy rm
    9. Applied pow111.6

      \[\leadsto \left(a1 \cdot \frac{a2}{b2}\right) \cdot \color{blue}{{\left(\frac{1}{b1}\right)}^{1}}\]
    10. Applied pow111.6

      \[\leadsto \color{blue}{{\left(a1 \cdot \frac{a2}{b2}\right)}^{1}} \cdot {\left(\frac{1}{b1}\right)}^{1}\]
    11. Applied pow-prod-down11.6

      \[\leadsto \color{blue}{{\left(\left(a1 \cdot \frac{a2}{b2}\right) \cdot \frac{1}{b1}\right)}^{1}}\]
    12. Simplified6.3

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

    if -4.635198921460311e+222 < (* a1 a2) < -4.151349519826297e-252 or 2.5035993978499362e-275 < (* a1 a2) < 1.2588973641699893e+212

    1. Initial program 4.6

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

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

      \[\leadsto \color{blue}{\frac{a1 \cdot \frac{a2}{b2}}{b1}}\]
    6. Taylor expanded around 0 4.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.635198921460311 \cdot 10^{+222}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.151349519826297 \cdot 10^{-252}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.5035993978499362 \cdot 10^{-275}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2588973641699893 \cdot 10^{+212}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \end{array}\]

Reproduce

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

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

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