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 r159902 = a1;
        double r159903 = a2;
        double r159904 = r159902 * r159903;
        double r159905 = b1;
        double r159906 = b2;
        double r159907 = r159905 * r159906;
        double r159908 = r159904 / r159907;
        return r159908;
}

double f(double a1, double a2, double b1, double b2) {
        double r159909 = a1;
        double r159910 = a2;
        double r159911 = r159909 * r159910;
        double r159912 = b1;
        double r159913 = b2;
        double r159914 = r159912 * r159913;
        double r159915 = r159911 / r159914;
        double r159916 = -5.6299209626543135e+278;
        bool r159917 = r159915 <= r159916;
        double r159918 = -1.8763565820874656e-287;
        bool r159919 = r159915 <= r159918;
        double r159920 = 1.1310223173930025e-246;
        bool r159921 = r159915 <= r159920;
        double r159922 = 5.499100526970725e+259;
        bool r159923 = r159915 <= r159922;
        double r159924 = !r159923;
        bool r159925 = r159921 || r159924;
        double r159926 = !r159925;
        bool r159927 = r159919 || r159926;
        double r159928 = !r159927;
        bool r159929 = r159917 || r159928;
        double r159930 = r159909 / r159912;
        double r159931 = r159913 / r159910;
        double r159932 = r159930 / r159931;
        double r159933 = r159929 ? r159932 : r159915;
        return r159933;
}

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)))