Average Error: 11.2 → 5.6
Time: 9.7s
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 8.211761671392944 \cdot 10^{-166}:\\ \;\;\;\;\frac{1}{\frac{b2}{a2} \cdot \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 8.211761671392944 \cdot 10^{-166}:\\
\;\;\;\;\frac{1}{\frac{b2}{a2} \cdot \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 r3431492 = a1;
        double r3431493 = a2;
        double r3431494 = r3431492 * r3431493;
        double r3431495 = b1;
        double r3431496 = b2;
        double r3431497 = r3431495 * r3431496;
        double r3431498 = r3431494 / r3431497;
        return r3431498;
}

double f(double a1, double a2, double b1, double b2) {
        double r3431499 = a1;
        double r3431500 = a2;
        double r3431501 = r3431499 * r3431500;
        double r3431502 = -8.29796578676969e+222;
        bool r3431503 = r3431501 <= r3431502;
        double r3431504 = b2;
        double r3431505 = r3431504 / r3431500;
        double r3431506 = b1;
        double r3431507 = r3431505 * r3431506;
        double r3431508 = r3431499 / r3431507;
        double r3431509 = -2.7996586332702162e-300;
        bool r3431510 = r3431501 <= r3431509;
        double r3431511 = 1.0;
        double r3431512 = r3431506 * r3431504;
        double r3431513 = r3431511 / r3431512;
        double r3431514 = r3431501 * r3431513;
        double r3431515 = 8.211761671392944e-166;
        bool r3431516 = r3431501 <= r3431515;
        double r3431517 = r3431506 / r3431499;
        double r3431518 = r3431505 * r3431517;
        double r3431519 = r3431511 / r3431518;
        double r3431520 = 5.314779618615164e+173;
        bool r3431521 = r3431501 <= r3431520;
        double r3431522 = r3431521 ? r3431514 : r3431508;
        double r3431523 = r3431516 ? r3431519 : r3431522;
        double r3431524 = r3431510 ? r3431514 : r3431523;
        double r3431525 = r3431503 ? r3431508 : r3431524;
        return r3431525;
}

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 8.211761671392944e-166 < (* 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) < 8.211761671392944e-166

    1. Initial program 15.2

      \[\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}}}\]
  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 8.211761671392944 \cdot 10^{-166}:\\ \;\;\;\;\frac{1}{\frac{b2}{a2} \cdot \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 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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