Average Error: 10.9 → 7.0
Time: 23.0s
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 r6172540 = a1;
        double r6172541 = a2;
        double r6172542 = r6172540 * r6172541;
        double r6172543 = b1;
        double r6172544 = b2;
        double r6172545 = r6172543 * r6172544;
        double r6172546 = r6172542 / r6172545;
        return r6172546;
}

double f(double a1, double a2, double b1, double b2) {
        double r6172547 = a1;
        double r6172548 = a2;
        double r6172549 = r6172547 * r6172548;
        double r6172550 = -5.361684755503667e+306;
        bool r6172551 = r6172549 <= r6172550;
        double r6172552 = b2;
        double r6172553 = r6172552 / r6172548;
        double r6172554 = r6172547 / r6172553;
        double r6172555 = b1;
        double r6172556 = r6172554 / r6172555;
        double r6172557 = -2.5839142907912905e-176;
        bool r6172558 = r6172549 <= r6172557;
        double r6172559 = r6172555 * r6172552;
        double r6172560 = r6172549 / r6172559;
        double r6172561 = 6.786326304240603e-220;
        bool r6172562 = r6172549 <= r6172561;
        double r6172563 = r6172547 / r6172555;
        double r6172564 = r6172548 / r6172552;
        double r6172565 = r6172563 * r6172564;
        double r6172566 = r6172562 ? r6172565 : r6172560;
        double r6172567 = r6172558 ? r6172560 : r6172566;
        double r6172568 = r6172551 ? r6172556 : r6172567;
        return r6172568;
}

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 -inf 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 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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