Average Error: 10.8 → 5.2
Time: 12.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.1555799853760176 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.1084891218651217 \cdot 10^{-234}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.666768526518194 \cdot 10^{+83}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2733908 = a1;
        double r2733909 = a2;
        double r2733910 = r2733908 * r2733909;
        double r2733911 = b1;
        double r2733912 = b2;
        double r2733913 = r2733911 * r2733912;
        double r2733914 = r2733910 / r2733913;
        return r2733914;
}

double f(double a1, double a2, double b1, double b2) {
        double r2733915 = a1;
        double r2733916 = a2;
        double r2733917 = r2733915 * r2733916;
        double r2733918 = -3.975410788026315e+305;
        bool r2733919 = r2733917 <= r2733918;
        double r2733920 = b1;
        double r2733921 = r2733915 / r2733920;
        double r2733922 = b2;
        double r2733923 = r2733916 / r2733922;
        double r2733924 = r2733921 * r2733923;
        double r2733925 = -5.1555799853760176e-213;
        bool r2733926 = r2733917 <= r2733925;
        double r2733927 = r2733922 * r2733920;
        double r2733928 = r2733917 / r2733927;
        double r2733929 = 1.1084891218651217e-234;
        bool r2733930 = r2733917 <= r2733929;
        double r2733931 = r2733916 / r2733920;
        double r2733932 = r2733931 / r2733922;
        double r2733933 = r2733915 * r2733932;
        double r2733934 = 5.666768526518194e+83;
        bool r2733935 = r2733917 <= r2733934;
        double r2733936 = r2733935 ? r2733928 : r2733924;
        double r2733937 = r2733930 ? r2733933 : r2733936;
        double r2733938 = r2733926 ? r2733928 : r2733937;
        double r2733939 = r2733919 ? r2733924 : r2733938;
        return r2733939;
}

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

Original10.8
Target11.0
Herbie5.2
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -3.975410788026315e+305 or 5.666768526518194e+83 < (* a1 a2)

    1. Initial program 28.2

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

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

    if -3.975410788026315e+305 < (* a1 a2) < -5.1555799853760176e-213 or 1.1084891218651217e-234 < (* a1 a2) < 5.666768526518194e+83

    1. Initial program 3.9

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

    if -5.1555799853760176e-213 < (* a1 a2) < 1.1084891218651217e-234

    1. Initial program 15.4

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

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

      \[\leadsto \color{blue}{\left(a1 \cdot \frac{1}{b1}\right)} \cdot \frac{a2}{b2}\]
    6. Applied associate-*l*4.6

      \[\leadsto \color{blue}{a1 \cdot \left(\frac{1}{b1} \cdot \frac{a2}{b2}\right)}\]
    7. Simplified4.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.1555799853760176 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.1084891218651217 \cdot 10^{-234}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.666768526518194 \cdot 10^{+83}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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