Average Error: 11.2 → 5.6
Time: 32.5s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.445905988366334040639285224787715187975 \cdot 10^{244}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.609520285206617620294914143781194869795 \cdot 10^{-248}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.307444751099091752185460323607005997068 \cdot 10^{-272}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.182783549232119682193057561507006002421 \cdot 10^{164}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.445905988366334040639285224787715187975 \cdot 10^{244}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\

\mathbf{elif}\;a1 \cdot a2 \le -9.609520285206617620294914143781194869795 \cdot 10^{-248}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5820720 = a1;
        double r5820721 = a2;
        double r5820722 = r5820720 * r5820721;
        double r5820723 = b1;
        double r5820724 = b2;
        double r5820725 = r5820723 * r5820724;
        double r5820726 = r5820722 / r5820725;
        return r5820726;
}

double f(double a1, double a2, double b1, double b2) {
        double r5820727 = a1;
        double r5820728 = a2;
        double r5820729 = r5820727 * r5820728;
        double r5820730 = -1.445905988366334e+244;
        bool r5820731 = r5820729 <= r5820730;
        double r5820732 = b2;
        double r5820733 = b1;
        double r5820734 = r5820728 / r5820733;
        double r5820735 = r5820732 / r5820734;
        double r5820736 = r5820727 / r5820735;
        double r5820737 = -9.609520285206618e-248;
        bool r5820738 = r5820729 <= r5820737;
        double r5820739 = 1.0;
        double r5820740 = r5820733 / r5820729;
        double r5820741 = r5820739 / r5820740;
        double r5820742 = r5820741 / r5820732;
        double r5820743 = 1.3074447510990918e-272;
        bool r5820744 = r5820729 <= r5820743;
        double r5820745 = cbrt(r5820732);
        double r5820746 = r5820745 * r5820745;
        double r5820747 = r5820727 / r5820746;
        double r5820748 = r5820734 / r5820745;
        double r5820749 = r5820747 * r5820748;
        double r5820750 = 1.1827835492321197e+164;
        bool r5820751 = r5820729 <= r5820750;
        double r5820752 = r5820751 ? r5820742 : r5820736;
        double r5820753 = r5820744 ? r5820749 : r5820752;
        double r5820754 = r5820738 ? r5820742 : r5820753;
        double r5820755 = r5820731 ? r5820736 : r5820754;
        return r5820755;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -1.445905988366334e+244 or 1.1827835492321197e+164 < (* a1 a2)

    1. Initial program 34.5

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

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{1} \cdot \frac{a2}{b1}}}{b2}\]
    7. Applied associate-/l*10.7

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

    if -1.445905988366334e+244 < (* a1 a2) < -9.609520285206618e-248 or 1.3074447510990918e-272 < (* a1 a2) < 1.1827835492321197e+164

    1. Initial program 4.8

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

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

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

    if -9.609520285206618e-248 < (* a1 a2) < 1.3074447510990918e-272

    1. Initial program 17.2

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{\left(\sqrt[3]{b2} \cdot \sqrt[3]{b2}\right) \cdot \sqrt[3]{b2}}}\]
    6. Applied *-un-lft-identity16.4

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.445905988366334040639285224787715187975 \cdot 10^{244}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.609520285206617620294914143781194869795 \cdot 10^{-248}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.307444751099091752185460323607005997068 \cdot 10^{-272}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.182783549232119682193057561507006002421 \cdot 10^{164}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\ \end{array}\]

Reproduce

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

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

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