Average Error: 11.0 → 5.5
Time: 12.0s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.994607886164469 \cdot 10^{+285}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -8.15908135962733 \cdot 10^{-136}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.189043301750101 \cdot 10^{-232}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.98603927195009 \cdot 10^{-194}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.9296454068039114 \cdot 10^{+193}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.994607886164469 \cdot 10^{+285}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

\mathbf{elif}\;a1 \cdot a2 \le 1.9296454068039114 \cdot 10^{+193}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6378528 = a1;
        double r6378529 = a2;
        double r6378530 = r6378528 * r6378529;
        double r6378531 = b1;
        double r6378532 = b2;
        double r6378533 = r6378531 * r6378532;
        double r6378534 = r6378530 / r6378533;
        return r6378534;
}

double f(double a1, double a2, double b1, double b2) {
        double r6378535 = a1;
        double r6378536 = a2;
        double r6378537 = r6378535 * r6378536;
        double r6378538 = -3.994607886164469e+285;
        bool r6378539 = r6378537 <= r6378538;
        double r6378540 = b1;
        double r6378541 = r6378535 / r6378540;
        double r6378542 = b2;
        double r6378543 = r6378536 / r6378542;
        double r6378544 = r6378541 * r6378543;
        double r6378545 = -8.15908135962733e-136;
        bool r6378546 = r6378537 <= r6378545;
        double r6378547 = 1.0;
        double r6378548 = r6378542 * r6378540;
        double r6378549 = r6378548 / r6378537;
        double r6378550 = r6378547 / r6378549;
        double r6378551 = -1.189043301750101e-232;
        bool r6378552 = r6378537 <= r6378551;
        double r6378553 = r6378540 / r6378537;
        double r6378554 = r6378547 / r6378553;
        double r6378555 = r6378554 / r6378542;
        double r6378556 = 4.98603927195009e-194;
        bool r6378557 = r6378537 <= r6378556;
        double r6378558 = r6378536 / r6378540;
        double r6378559 = r6378558 / r6378542;
        double r6378560 = r6378535 * r6378559;
        double r6378561 = 1.9296454068039114e+193;
        bool r6378562 = r6378537 <= r6378561;
        double r6378563 = r6378548 / r6378536;
        double r6378564 = r6378535 / r6378563;
        double r6378565 = r6378562 ? r6378555 : r6378564;
        double r6378566 = r6378557 ? r6378560 : r6378565;
        double r6378567 = r6378552 ? r6378555 : r6378566;
        double r6378568 = r6378546 ? r6378550 : r6378567;
        double r6378569 = r6378539 ? r6378544 : r6378568;
        return r6378569;
}

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.0
Target10.8
Herbie5.5
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 5 regimes
  2. if (* a1 a2) < -3.994607886164469e+285

    1. Initial program 52.8

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

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

    if -3.994607886164469e+285 < (* a1 a2) < -8.15908135962733e-136

    1. Initial program 4.8

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num5.0

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

    if -8.15908135962733e-136 < (* a1 a2) < -1.189043301750101e-232 or 4.98603927195009e-194 < (* a1 a2) < 1.9296454068039114e+193

    1. Initial program 4.9

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied clear-num4.0

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

    if -1.189043301750101e-232 < (* a1 a2) < 4.98603927195009e-194

    1. Initial program 14.6

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

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

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

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

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

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

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

    if 1.9296454068039114e+193 < (* a1 a2)

    1. Initial program 33.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.994607886164469 \cdot 10^{+285}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -8.15908135962733 \cdot 10^{-136}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.189043301750101 \cdot 10^{-232}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.98603927195009 \cdot 10^{-194}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.9296454068039114 \cdot 10^{+193}:\\ \;\;\;\;\frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \end{array}\]

Reproduce

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

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

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