Average Error: 11.3 → 3.4
Time: 2.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.629920962654313471604012923529225270914 \cdot 10^{278} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.876356582087465582822541150969070437304 \cdot 10^{-287} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.131022317393002517657401368626620541691 \cdot 10^{-246} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.499100526970725014397291959470552919566 \cdot 10^{259}\right)\right)\right):\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.629920962654313471604012923529225270914 \cdot 10^{278} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.876356582087465582822541150969070437304 \cdot 10^{-287} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.131022317393002517657401368626620541691 \cdot 10^{-246} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.499100526970725014397291959470552919566 \cdot 10^{259}\right)\right)\right):\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r129735 = a1;
        double r129736 = a2;
        double r129737 = r129735 * r129736;
        double r129738 = b1;
        double r129739 = b2;
        double r129740 = r129738 * r129739;
        double r129741 = r129737 / r129740;
        return r129741;
}

double f(double a1, double a2, double b1, double b2) {
        double r129742 = a1;
        double r129743 = a2;
        double r129744 = r129742 * r129743;
        double r129745 = b1;
        double r129746 = b2;
        double r129747 = r129745 * r129746;
        double r129748 = r129744 / r129747;
        double r129749 = -5.6299209626543135e+278;
        bool r129750 = r129748 <= r129749;
        double r129751 = -1.8763565820874656e-287;
        bool r129752 = r129748 <= r129751;
        double r129753 = 1.1310223173930025e-246;
        bool r129754 = r129748 <= r129753;
        double r129755 = 5.499100526970725e+259;
        bool r129756 = r129748 <= r129755;
        double r129757 = !r129756;
        bool r129758 = r129754 || r129757;
        double r129759 = !r129758;
        bool r129760 = r129752 || r129759;
        double r129761 = !r129760;
        bool r129762 = r129750 || r129761;
        double r129763 = r129742 / r129745;
        double r129764 = r129746 / r129743;
        double r129765 = r129763 / r129764;
        double r129766 = r129762 ? r129765 : r129748;
        return r129766;
}

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.3
Target11.5
Herbie3.4
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 2 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -5.6299209626543135e+278 or -1.8763565820874656e-287 < (/ (* a1 a2) (* b1 b2)) < 1.1310223173930025e-246 or 5.499100526970725e+259 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 23.1

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied associate-/l*8.0

      \[\leadsto \frac{\color{blue}{\frac{a1}{\frac{b1}{a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied associate-/r/8.3

      \[\leadsto \frac{\color{blue}{\frac{a1}{b1} \cdot a2}}{b2}\]
    8. Applied associate-/l*6.4

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

    if -5.6299209626543135e+278 < (/ (* a1 a2) (* b1 b2)) < -1.8763565820874656e-287 or 1.1310223173930025e-246 < (/ (* a1 a2) (* b1 b2)) < 5.499100526970725e+259

    1. Initial program 0.7

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.629920962654313471604012923529225270914 \cdot 10^{278} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.876356582087465582822541150969070437304 \cdot 10^{-287} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.131022317393002517657401368626620541691 \cdot 10^{-246} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.499100526970725014397291959470552919566 \cdot 10^{259}\right)\right)\right):\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \end{array}\]

Reproduce

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

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

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