Average Error: 11.5 → 6.1
Time: 8.3s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.103031774251489582409915525348219347136 \cdot 10^{241}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.940973758331948228787265542772159085713 \cdot 10^{-276}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.471768101920643639195818820332840731202 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.222017195284376264633152553789587622996 \cdot 10^{102}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \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 -4.103031774251489582409915525348219347136 \cdot 10^{241}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r115555 = a1;
        double r115556 = a2;
        double r115557 = r115555 * r115556;
        double r115558 = b1;
        double r115559 = b2;
        double r115560 = r115558 * r115559;
        double r115561 = r115557 / r115560;
        return r115561;
}

double f(double a1, double a2, double b1, double b2) {
        double r115562 = a1;
        double r115563 = a2;
        double r115564 = r115562 * r115563;
        double r115565 = -4.1030317742514896e+241;
        bool r115566 = r115564 <= r115565;
        double r115567 = b1;
        double r115568 = b2;
        double r115569 = r115563 / r115568;
        double r115570 = r115567 / r115569;
        double r115571 = r115562 / r115570;
        double r115572 = -1.9409737583319482e-276;
        bool r115573 = r115564 <= r115572;
        double r115574 = 1.0;
        double r115575 = r115567 * r115568;
        double r115576 = r115575 / r115564;
        double r115577 = r115574 / r115576;
        double r115578 = 2.4717681019206436e-213;
        bool r115579 = r115564 <= r115578;
        double r115580 = 1.2220171952843763e+102;
        bool r115581 = r115564 <= r115580;
        double r115582 = r115562 / r115567;
        double r115583 = r115582 * r115569;
        double r115584 = r115581 ? r115577 : r115583;
        double r115585 = r115579 ? r115571 : r115584;
        double r115586 = r115573 ? r115577 : r115585;
        double r115587 = r115566 ? r115571 : r115586;
        return r115587;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -4.1030317742514896e+241 or -1.9409737583319482e-276 < (* a1 a2) < 2.4717681019206436e-213

    1. Initial program 21.8

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

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

      \[\leadsto \frac{1}{\color{blue}{1 \cdot \frac{b1 \cdot b2}{a1 \cdot a2}}}\]
    6. Applied add-cube-cbrt22.0

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

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

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

      \[\leadsto 1 \cdot \color{blue}{\left(\frac{a1 \cdot a2}{b1 \cdot b2} \cdot 1\right)}\]
    10. Using strategy rm
    11. Applied associate-/l*9.7

      \[\leadsto 1 \cdot \left(\color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}} \cdot 1\right)\]
    12. Using strategy rm
    13. Applied associate-/l*4.8

      \[\leadsto 1 \cdot \left(\frac{a1}{\color{blue}{\frac{b1}{\frac{a2}{b2}}}} \cdot 1\right)\]

    if -4.1030317742514896e+241 < (* a1 a2) < -1.9409737583319482e-276 or 2.4717681019206436e-213 < (* a1 a2) < 1.2220171952843763e+102

    1. Initial program 4.7

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

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

    if 1.2220171952843763e+102 < (* a1 a2)

    1. Initial program 21.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.103031774251489582409915525348219347136 \cdot 10^{241}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.940973758331948228787265542772159085713 \cdot 10^{-276}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.471768101920643639195818820332840731202 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.222017195284376264633152553789587622996 \cdot 10^{102}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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