Average Error: 11.5 → 4.7
Time: 3.5s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.1576239880029206 \cdot 10^{195}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -7.6760268479022844 \cdot 10^{-278}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.3851302523781732 \cdot 10^{-273}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.0507310125992406 \cdot 10^{162}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \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.1576239880029206 \cdot 10^{195}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 2.0507310125992406 \cdot 10^{162}:\\
\;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r291201 = a1;
        double r291202 = a2;
        double r291203 = r291201 * r291202;
        double r291204 = b1;
        double r291205 = b2;
        double r291206 = r291204 * r291205;
        double r291207 = r291203 / r291206;
        return r291207;
}

double f(double a1, double a2, double b1, double b2) {
        double r291208 = a1;
        double r291209 = a2;
        double r291210 = r291208 * r291209;
        double r291211 = -8.157623988002921e+195;
        bool r291212 = r291210 <= r291211;
        double r291213 = b1;
        double r291214 = r291209 / r291213;
        double r291215 = b2;
        double r291216 = r291214 / r291215;
        double r291217 = r291208 * r291216;
        double r291218 = -7.676026847902284e-278;
        bool r291219 = r291210 <= r291218;
        double r291220 = cbrt(r291215);
        double r291221 = r291220 * r291220;
        double r291222 = r291210 / r291221;
        double r291223 = 1.0;
        double r291224 = r291223 / r291213;
        double r291225 = r291224 / r291220;
        double r291226 = r291222 * r291225;
        double r291227 = 1.3851302523781732e-273;
        bool r291228 = r291210 <= r291227;
        double r291229 = r291208 / r291213;
        double r291230 = r291209 / r291215;
        double r291231 = r291229 * r291230;
        double r291232 = 2.0507310125992406e+162;
        bool r291233 = r291210 <= r291232;
        double r291234 = r291233 ? r291226 : r291217;
        double r291235 = r291228 ? r291231 : r291234;
        double r291236 = r291219 ? r291226 : r291235;
        double r291237 = r291212 ? r291217 : r291236;
        return r291237;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -8.157623988002921e+195 or 2.0507310125992406e+162 < (* a1 a2)

    1. Initial program 30.8

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

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

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

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

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

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

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

    if -8.157623988002921e+195 < (* a1 a2) < -7.676026847902284e-278 or 1.3851302523781732e-273 < (* a1 a2) < 2.0507310125992406e+162

    1. Initial program 5.0

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt5.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 div-inv5.4

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

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

    if -7.676026847902284e-278 < (* a1 a2) < 1.3851302523781732e-273

    1. Initial program 18.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.1576239880029206 \cdot 10^{195}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -7.6760268479022844 \cdot 10^{-278}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.3851302523781732 \cdot 10^{-273}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.0507310125992406 \cdot 10^{162}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \end{array}\]

Reproduce

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

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

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