Average Error: 11.2 → 5.6
Time: 10.1s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.824187060576902 \cdot 10^{-170}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{1}{\frac{b1}{a1}}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.314779618615164 \cdot 10^{+173}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\

\mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 5.314779618615164 \cdot 10^{+173}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r7338443 = a1;
        double r7338444 = a2;
        double r7338445 = r7338443 * r7338444;
        double r7338446 = b1;
        double r7338447 = b2;
        double r7338448 = r7338446 * r7338447;
        double r7338449 = r7338445 / r7338448;
        return r7338449;
}

double f(double a1, double a2, double b1, double b2) {
        double r7338450 = a1;
        double r7338451 = a2;
        double r7338452 = r7338450 * r7338451;
        double r7338453 = -8.29796578676969e+222;
        bool r7338454 = r7338452 <= r7338453;
        double r7338455 = b2;
        double r7338456 = r7338455 / r7338451;
        double r7338457 = b1;
        double r7338458 = r7338456 * r7338457;
        double r7338459 = r7338450 / r7338458;
        double r7338460 = -2.7996586332702162e-300;
        bool r7338461 = r7338452 <= r7338460;
        double r7338462 = 1.0;
        double r7338463 = r7338457 * r7338455;
        double r7338464 = r7338462 / r7338463;
        double r7338465 = r7338452 * r7338464;
        double r7338466 = 4.824187060576902e-170;
        bool r7338467 = r7338452 <= r7338466;
        double r7338468 = r7338451 / r7338455;
        double r7338469 = r7338457 / r7338450;
        double r7338470 = r7338462 / r7338469;
        double r7338471 = r7338468 * r7338470;
        double r7338472 = 5.314779618615164e+173;
        bool r7338473 = r7338452 <= r7338472;
        double r7338474 = r7338473 ? r7338465 : r7338459;
        double r7338475 = r7338467 ? r7338471 : r7338474;
        double r7338476 = r7338461 ? r7338465 : r7338475;
        double r7338477 = r7338454 ? r7338459 : r7338476;
        return r7338477;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -8.29796578676969e+222 or 5.314779618615164e+173 < (* a1 a2)

    1. Initial program 35.1

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

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

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

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

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

    if -8.29796578676969e+222 < (* a1 a2) < -2.7996586332702162e-300 or 4.824187060576902e-170 < (* a1 a2) < 5.314779618615164e+173

    1. Initial program 4.5

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

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

    if -2.7996586332702162e-300 < (* a1 a2) < 4.824187060576902e-170

    1. Initial program 15.3

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

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

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.824187060576902 \cdot 10^{-170}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{1}{\frac{b1}{a1}}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.314779618615164 \cdot 10^{+173}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \end{array}\]

Reproduce

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

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

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