Average Error: 10.8 → 6.8
Time: 9.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.400716313668456 \cdot 10^{-101}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.4490538368871561 \cdot 10^{-99}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.3810800204304724 \cdot 10^{+304}:\\ \;\;\;\;\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 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 3.3810800204304724 \cdot 10^{+304}:\\
\;\;\;\;\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 r1634421 = a1;
        double r1634422 = a2;
        double r1634423 = r1634421 * r1634422;
        double r1634424 = b1;
        double r1634425 = b2;
        double r1634426 = r1634424 * r1634425;
        double r1634427 = r1634423 / r1634426;
        return r1634427;
}

double f(double a1, double a2, double b1, double b2) {
        double r1634428 = a1;
        double r1634429 = a2;
        double r1634430 = r1634428 * r1634429;
        double r1634431 = -inf.0;
        bool r1634432 = r1634430 <= r1634431;
        double r1634433 = b1;
        double r1634434 = r1634428 / r1634433;
        double r1634435 = b2;
        double r1634436 = r1634429 / r1634435;
        double r1634437 = r1634434 * r1634436;
        double r1634438 = -4.400716313668456e-101;
        bool r1634439 = r1634430 <= r1634438;
        double r1634440 = r1634430 / r1634433;
        double r1634441 = r1634440 / r1634435;
        double r1634442 = 1.4490538368871561e-99;
        bool r1634443 = r1634430 <= r1634442;
        double r1634444 = 1.0;
        double r1634445 = r1634444 / r1634433;
        double r1634446 = r1634435 / r1634429;
        double r1634447 = r1634428 / r1634446;
        double r1634448 = r1634445 * r1634447;
        double r1634449 = 3.3810800204304724e+304;
        bool r1634450 = r1634430 <= r1634449;
        double r1634451 = r1634450 ? r1634441 : r1634437;
        double r1634452 = r1634443 ? r1634448 : r1634451;
        double r1634453 = r1634439 ? r1634441 : r1634452;
        double r1634454 = r1634432 ? r1634437 : r1634453;
        return r1634454;
}

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

Original10.8
Target11.2
Herbie6.8
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -inf.0 or 3.3810800204304724e+304 < (* a1 a2)

    1. Initial program 59.7

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

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

    if -inf.0 < (* a1 a2) < -4.400716313668456e-101 or 1.4490538368871561e-99 < (* a1 a2) < 3.3810800204304724e+304

    1. Initial program 5.2

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

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

    if -4.400716313668456e-101 < (* a1 a2) < 1.4490538368871561e-99

    1. Initial program 11.0

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Applied *-un-lft-identity7.1

      \[\leadsto \frac{\color{blue}{1 \cdot a1}}{\frac{b1}{1} \cdot \frac{b2}{a2}}\]
    8. Applied times-frac8.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -4.400716313668456 \cdot 10^{-101}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.4490538368871561 \cdot 10^{-99}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1}{\frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.3810800204304724 \cdot 10^{+304}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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