Average Error: 11.7 → 5.3
Time: 3.5s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.6323533454543057 \cdot 10^{208}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.37354660740668432 \cdot 10^{-150}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.54641561652090935 \cdot 10^{-236}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.51127703032407457 \cdot 10^{-153}:\\ \;\;\;\;\frac{a1}{b2 \cdot b1} \cdot a2\\ \mathbf{elif}\;a1 \cdot a2 \le 5.19284675887811351 \cdot 10^{171}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.6323533454543057 \cdot 10^{208}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r188563 = a1;
        double r188564 = a2;
        double r188565 = r188563 * r188564;
        double r188566 = b1;
        double r188567 = b2;
        double r188568 = r188566 * r188567;
        double r188569 = r188565 / r188568;
        return r188569;
}

double f(double a1, double a2, double b1, double b2) {
        double r188570 = a1;
        double r188571 = a2;
        double r188572 = r188570 * r188571;
        double r188573 = -8.632353345454306e+208;
        bool r188574 = r188572 <= r188573;
        double r188575 = b1;
        double r188576 = r188570 / r188575;
        double r188577 = b2;
        double r188578 = r188571 / r188577;
        double r188579 = r188576 * r188578;
        double r188580 = -1.3735466074066843e-150;
        bool r188581 = r188572 <= r188580;
        double r188582 = r188572 / r188575;
        double r188583 = r188582 / r188577;
        double r188584 = 1.5464156165209094e-236;
        bool r188585 = r188572 <= r188584;
        double r188586 = cbrt(r188577);
        double r188587 = r188586 * r188586;
        double r188588 = r188576 / r188587;
        double r188589 = r188571 / r188586;
        double r188590 = r188588 * r188589;
        double r188591 = 8.511277030324075e-153;
        bool r188592 = r188572 <= r188591;
        double r188593 = r188577 * r188575;
        double r188594 = r188570 / r188593;
        double r188595 = r188594 * r188571;
        double r188596 = 5.1928467588781135e+171;
        bool r188597 = r188572 <= r188596;
        double r188598 = r188597 ? r188583 : r188579;
        double r188599 = r188592 ? r188595 : r188598;
        double r188600 = r188585 ? r188590 : r188599;
        double r188601 = r188581 ? r188583 : r188600;
        double r188602 = r188574 ? r188579 : r188601;
        return r188602;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -8.632353345454306e+208 or 5.1928467588781135e+171 < (* a1 a2)

    1. Initial program 32.6

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

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

    if -8.632353345454306e+208 < (* a1 a2) < -1.3735466074066843e-150 or 8.511277030324075e-153 < (* a1 a2) < 5.1928467588781135e+171

    1. Initial program 4.0

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

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

    if -1.3735466074066843e-150 < (* a1 a2) < 1.5464156165209094e-236

    1. Initial program 15.3

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

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

      \[\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-identity4.8

      \[\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-frac4.8

      \[\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*4.4

      \[\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. Simplified4.4

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

    if 1.5464156165209094e-236 < (* a1 a2) < 8.511277030324075e-153

    1. Initial program 7.2

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

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

      \[\leadsto \frac{a1}{\color{blue}{b1 \cdot \frac{b2}{a2}}}\]
    5. Using strategy rm
    6. Applied *-commutative10.9

      \[\leadsto \frac{a1}{\color{blue}{\frac{b2}{a2} \cdot b1}}\]
    7. Using strategy rm
    8. Applied associate-*l/9.7

      \[\leadsto \frac{a1}{\color{blue}{\frac{b2 \cdot b1}{a2}}}\]
    9. Applied associate-/r/9.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.6323533454543057 \cdot 10^{208}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.37354660740668432 \cdot 10^{-150}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.54641561652090935 \cdot 10^{-236}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.51127703032407457 \cdot 10^{-153}:\\ \;\;\;\;\frac{a1}{b2 \cdot b1} \cdot a2\\ \mathbf{elif}\;a1 \cdot a2 \le 5.19284675887811351 \cdot 10^{171}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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