Average Error: 10.9 → 7.0
Time: 22.3s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -5.361684755503667 \cdot 10^{+306}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b2}{a2}}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.5839142907912905 \cdot 10^{-176}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.786326304240603 \cdot 10^{-220}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -5.361684755503667 \cdot 10^{+306}:\\
\;\;\;\;\frac{\frac{a1}{\frac{b2}{a2}}}{b1}\\

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r26417466 = a1;
        double r26417467 = a2;
        double r26417468 = r26417466 * r26417467;
        double r26417469 = b1;
        double r26417470 = b2;
        double r26417471 = r26417469 * r26417470;
        double r26417472 = r26417468 / r26417471;
        return r26417472;
}

double f(double a1, double a2, double b1, double b2) {
        double r26417473 = a1;
        double r26417474 = a2;
        double r26417475 = r26417473 * r26417474;
        double r26417476 = -5.361684755503667e+306;
        bool r26417477 = r26417475 <= r26417476;
        double r26417478 = b2;
        double r26417479 = r26417478 / r26417474;
        double r26417480 = r26417473 / r26417479;
        double r26417481 = b1;
        double r26417482 = r26417480 / r26417481;
        double r26417483 = -2.5839142907912905e-176;
        bool r26417484 = r26417475 <= r26417483;
        double r26417485 = r26417481 * r26417478;
        double r26417486 = r26417475 / r26417485;
        double r26417487 = 6.786326304240603e-220;
        bool r26417488 = r26417475 <= r26417487;
        double r26417489 = r26417473 / r26417481;
        double r26417490 = r26417474 / r26417478;
        double r26417491 = r26417489 * r26417490;
        double r26417492 = r26417488 ? r26417491 : r26417486;
        double r26417493 = r26417484 ? r26417486 : r26417492;
        double r26417494 = r26417477 ? r26417482 : r26417493;
        return r26417494;
}

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.9
Target11.2
Herbie7.0
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -5.361684755503667e+306

    1. Initial program 60.6

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

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

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

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

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

    if -5.361684755503667e+306 < (* a1 a2) < -2.5839142907912905e-176 or 6.786326304240603e-220 < (* a1 a2)

    1. Initial program 7.7

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied div-inv7.3

      \[\leadsto \color{blue}{\frac{a1 \cdot a2}{b1} \cdot \frac{1}{b2}}\]
    6. Taylor expanded around 0 7.7

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

    if -2.5839142907912905e-176 < (* a1 a2) < 6.786326304240603e-220

    1. Initial program 13.8

      \[\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}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification7.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -5.361684755503667 \cdot 10^{+306}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b2}{a2}}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.5839142907912905 \cdot 10^{-176}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.786326304240603 \cdot 10^{-220}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \end{array}\]

Reproduce

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

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

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