Average Error: 11.3 → 5.3
Time: 10.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.693698724261816125107112905711370833358 \cdot 10^{165}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -3.707668888703281368163532340403839839767 \cdot 10^{-122}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.19993479002908504067253615537087606283 \cdot 10^{-139}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.010390436043786450702687045612742247864 \cdot 10^{241}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.693698724261816125107112905711370833358 \cdot 10^{165}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 5.19993479002908504067253615537087606283 \cdot 10^{-139}:\\
\;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r73596 = a1;
        double r73597 = a2;
        double r73598 = r73596 * r73597;
        double r73599 = b1;
        double r73600 = b2;
        double r73601 = r73599 * r73600;
        double r73602 = r73598 / r73601;
        return r73602;
}

double f(double a1, double a2, double b1, double b2) {
        double r73603 = a1;
        double r73604 = a2;
        double r73605 = r73603 * r73604;
        double r73606 = -8.693698724261816e+165;
        bool r73607 = r73605 <= r73606;
        double r73608 = b1;
        double r73609 = r73603 / r73608;
        double r73610 = b2;
        double r73611 = r73604 / r73610;
        double r73612 = r73609 * r73611;
        double r73613 = -3.7076688887032814e-122;
        bool r73614 = r73605 <= r73613;
        double r73615 = r73605 / r73608;
        double r73616 = r73615 / r73610;
        double r73617 = 5.199934790029085e-139;
        bool r73618 = r73605 <= r73617;
        double r73619 = cbrt(r73608);
        double r73620 = r73619 * r73619;
        double r73621 = r73603 / r73620;
        double r73622 = r73604 / r73619;
        double r73623 = r73622 / r73610;
        double r73624 = r73621 * r73623;
        double r73625 = 2.0103904360437865e+241;
        bool r73626 = r73605 <= r73625;
        double r73627 = 1.0;
        double r73628 = r73608 * r73610;
        double r73629 = r73628 / r73605;
        double r73630 = r73627 / r73629;
        double r73631 = r73604 / r73608;
        double r73632 = r73631 / r73610;
        double r73633 = r73603 * r73632;
        double r73634 = r73626 ? r73630 : r73633;
        double r73635 = r73618 ? r73624 : r73634;
        double r73636 = r73614 ? r73616 : r73635;
        double r73637 = r73607 ? r73612 : r73636;
        return r73637;
}

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

Derivation

  1. Split input into 5 regimes
  2. if (* a1 a2) < -8.693698724261816e+165

    1. Initial program 29.0

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

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

    if -8.693698724261816e+165 < (* a1 a2) < -3.7076688887032814e-122

    1. Initial program 3.7

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

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

    if -3.7076688887032814e-122 < (* a1 a2) < 5.199934790029085e-139

    1. Initial program 13.1

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied add-cube-cbrt13.2

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{a2}{\sqrt[3]{b1}}}}{1 \cdot b2}\]
    8. Applied times-frac5.3

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

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

    if 5.199934790029085e-139 < (* a1 a2) < 2.0103904360437865e+241

    1. Initial program 4.3

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

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

    if 2.0103904360437865e+241 < (* a1 a2)

    1. Initial program 44.3

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied *-un-lft-identity42.4

      \[\leadsto \frac{\frac{a1 \cdot a2}{\color{blue}{1 \cdot b1}}}{1 \cdot b2}\]
    7. Applied times-frac17.9

      \[\leadsto \frac{\color{blue}{\frac{a1}{1} \cdot \frac{a2}{b1}}}{1 \cdot b2}\]
    8. Applied times-frac7.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.693698724261816125107112905711370833358 \cdot 10^{165}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -3.707668888703281368163532340403839839767 \cdot 10^{-122}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.19993479002908504067253615537087606283 \cdot 10^{-139}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.010390436043786450702687045612742247864 \cdot 10^{241}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \end{array}\]

Reproduce

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

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

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