Average Error: 11.3 → 5.2
Time: 4.0s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -9.3567683686872443 \cdot 10^{67}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.8968119495262209 \cdot 10^{-252}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.2548151514008324 \cdot 10^{-288}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.32370480772328473 \cdot 10^{277}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -9.3567683686872443 \cdot 10^{67}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 1.32370480772328473 \cdot 10^{277}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r168570 = a1;
        double r168571 = a2;
        double r168572 = r168570 * r168571;
        double r168573 = b1;
        double r168574 = b2;
        double r168575 = r168573 * r168574;
        double r168576 = r168572 / r168575;
        return r168576;
}

double f(double a1, double a2, double b1, double b2) {
        double r168577 = a1;
        double r168578 = a2;
        double r168579 = r168577 * r168578;
        double r168580 = -9.356768368687244e+67;
        bool r168581 = r168579 <= r168580;
        double r168582 = b1;
        double r168583 = r168577 / r168582;
        double r168584 = b2;
        double r168585 = cbrt(r168584);
        double r168586 = r168585 * r168585;
        double r168587 = r168583 / r168586;
        double r168588 = r168578 / r168585;
        double r168589 = r168587 * r168588;
        double r168590 = -5.896811949526221e-252;
        bool r168591 = r168579 <= r168590;
        double r168592 = r168579 / r168582;
        double r168593 = r168592 / r168584;
        double r168594 = 2.2548151514008324e-288;
        bool r168595 = r168579 <= r168594;
        double r168596 = r168578 / r168584;
        double r168597 = r168583 * r168596;
        double r168598 = 1.3237048077232847e+277;
        bool r168599 = r168579 <= r168598;
        double r168600 = r168599 ? r168593 : r168589;
        double r168601 = r168595 ? r168597 : r168600;
        double r168602 = r168591 ? r168593 : r168601;
        double r168603 = r168581 ? r168589 : r168602;
        return r168603;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -9.356768368687244e+67 or 1.3237048077232847e+277 < (* a1 a2)

    1. Initial program 26.2

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

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

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

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

      \[\leadsto \frac{a1}{b1} \cdot \color{blue}{\left(\frac{1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\right)}\]
    8. Applied associate-*r*9.8

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

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

    if -9.356768368687244e+67 < (* a1 a2) < -5.896811949526221e-252 or 2.2548151514008324e-288 < (* a1 a2) < 1.3237048077232847e+277

    1. Initial program 5.0

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

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

    if -5.896811949526221e-252 < (* a1 a2) < 2.2548151514008324e-288

    1. Initial program 17.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -9.3567683686872443 \cdot 10^{67}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.8968119495262209 \cdot 10^{-252}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.2548151514008324 \cdot 10^{-288}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.32370480772328473 \cdot 10^{277}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \end{array}\]

Reproduce

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

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

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