Average Error: 11.1 → 5.9
Time: 14.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -6.937968089239468 \cdot 10^{+243}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -5.331249277666462 \cdot 10^{-146}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1649363369639183 \cdot 10^{-186}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.6890648193479676 \cdot 10^{+48}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -6.937968089239468 \cdot 10^{+243}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\mathbf{elif}\;b1 \cdot b2 \le 5.6890648193479676 \cdot 10^{+48}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r7615522 = a1;
        double r7615523 = a2;
        double r7615524 = r7615522 * r7615523;
        double r7615525 = b1;
        double r7615526 = b2;
        double r7615527 = r7615525 * r7615526;
        double r7615528 = r7615524 / r7615527;
        return r7615528;
}

double f(double a1, double a2, double b1, double b2) {
        double r7615529 = b1;
        double r7615530 = b2;
        double r7615531 = r7615529 * r7615530;
        double r7615532 = -6.937968089239468e+243;
        bool r7615533 = r7615531 <= r7615532;
        double r7615534 = a1;
        double r7615535 = r7615534 / r7615529;
        double r7615536 = a2;
        double r7615537 = r7615536 / r7615530;
        double r7615538 = r7615535 * r7615537;
        double r7615539 = -5.331249277666462e-146;
        bool r7615540 = r7615531 <= r7615539;
        double r7615541 = r7615531 / r7615536;
        double r7615542 = r7615534 / r7615541;
        double r7615543 = 2.1649363369639183e-186;
        bool r7615544 = r7615531 <= r7615543;
        double r7615545 = r7615529 / r7615534;
        double r7615546 = r7615536 / r7615545;
        double r7615547 = r7615546 / r7615530;
        double r7615548 = 5.6890648193479676e+48;
        bool r7615549 = r7615531 <= r7615548;
        double r7615550 = r7615549 ? r7615542 : r7615547;
        double r7615551 = r7615544 ? r7615547 : r7615550;
        double r7615552 = r7615540 ? r7615542 : r7615551;
        double r7615553 = r7615533 ? r7615538 : r7615552;
        return r7615553;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* b1 b2) < -6.937968089239468e+243

    1. Initial program 18.0

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

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

    if -6.937968089239468e+243 < (* b1 b2) < -5.331249277666462e-146 or 2.1649363369639183e-186 < (* b1 b2) < 5.6890648193479676e+48

    1. Initial program 4.1

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

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

    if -5.331249277666462e-146 < (* b1 b2) < 2.1649363369639183e-186 or 5.6890648193479676e+48 < (* b1 b2)

    1. Initial program 17.0

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied associate-/r*11.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -6.937968089239468 \cdot 10^{+243}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -5.331249277666462 \cdot 10^{-146}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1649363369639183 \cdot 10^{-186}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.6890648193479676 \cdot 10^{+48}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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