Average Error: 11.4 → 5.4
Time: 35.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.577332261011133 \cdot 10^{-120}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1107718134298 \cdot 10^{-217}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.378312823211572 \cdot 10^{+229}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
double f(double a1, double a2, double b1, double b2) {
        double r37458681 = a1;
        double r37458682 = a2;
        double r37458683 = r37458681 * r37458682;
        double r37458684 = b1;
        double r37458685 = b2;
        double r37458686 = r37458684 * r37458685;
        double r37458687 = r37458683 / r37458686;
        return r37458687;
}

double f(double a1, double a2, double b1, double b2) {
        double r37458688 = b1;
        double r37458689 = b2;
        double r37458690 = r37458688 * r37458689;
        double r37458691 = -4.967958916173717e+118;
        bool r37458692 = r37458690 <= r37458691;
        double r37458693 = a1;
        double r37458694 = a2;
        double r37458695 = cbrt(r37458694);
        double r37458696 = r37458689 / r37458695;
        double r37458697 = r37458693 / r37458696;
        double r37458698 = r37458695 * r37458695;
        double r37458699 = r37458698 / r37458688;
        double r37458700 = r37458697 * r37458699;
        double r37458701 = -2.577332261011133e-120;
        bool r37458702 = r37458690 <= r37458701;
        double r37458703 = r37458693 / r37458690;
        double r37458704 = r37458703 * r37458694;
        double r37458705 = 2.1107718134298e-217;
        bool r37458706 = r37458690 <= r37458705;
        double r37458707 = r37458693 / r37458689;
        double r37458708 = r37458694 * r37458707;
        double r37458709 = r37458708 / r37458688;
        double r37458710 = 7.378312823211572e+229;
        bool r37458711 = r37458690 <= r37458710;
        double r37458712 = r37458693 / r37458688;
        double r37458713 = r37458694 / r37458689;
        double r37458714 = r37458712 * r37458713;
        double r37458715 = r37458711 ? r37458704 : r37458714;
        double r37458716 = r37458706 ? r37458709 : r37458715;
        double r37458717 = r37458702 ? r37458704 : r37458716;
        double r37458718 = r37458692 ? r37458700 : r37458717;
        return r37458718;
}

\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\

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

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

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

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

\end{array}

Error

Bits error versus a1

Bits error versus a2

Bits error versus b1

Bits error versus b2

Target

Original11.4
Target10.8
Herbie5.4
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 4 regimes
  2. if (* b1 b2) < -4.967958916173717e+118

    1. Initial program 13.2

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{\sqrt[3]{a2} \cdot \sqrt[3]{a2}} \cdot \frac{b2}{\sqrt[3]{a2}}}}\]
    7. Applied *-un-lft-identity8.8

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

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

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

    if -4.967958916173717e+118 < (* b1 b2) < -2.577332261011133e-120 or 2.1107718134298e-217 < (* b1 b2) < 7.378312823211572e+229

    1. Initial program 4.3

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

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

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

    if -2.577332261011133e-120 < (* b1 b2) < 2.1107718134298e-217

    1. Initial program 25.8

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

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

      \[\leadsto \frac{a1}{\frac{b1 \cdot b2}{\color{blue}{\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \sqrt[3]{a2}}}}\]
    6. Applied times-frac14.0

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{\sqrt[3]{a2} \cdot \sqrt[3]{a2}} \cdot \frac{b2}{\sqrt[3]{a2}}}}\]
    7. Applied *-un-lft-identity14.0

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

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

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

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

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

    if 7.378312823211572e+229 < (* b1 b2)

    1. Initial program 17.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.577332261011133 \cdot 10^{-120}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1107718134298 \cdot 10^{-217}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.378312823211572 \cdot 10^{+229}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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