Average Error: 11.5 → 6.6
Time: 12.1s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.059130151729121113659458114614373030793 \cdot 10^{101}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b2 \cdot b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.370789926321058777754218050252398287174 \cdot 10^{-258}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.135835035457980197152821008820896199299 \cdot 10^{-234}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.246307839867652065988411443641022946156 \cdot 10^{166}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b2 \cdot b1}}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.059130151729121113659458114614373030793 \cdot 10^{101}:\\
\;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b2 \cdot b1}}}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 3.246307839867652065988411443641022946156 \cdot 10^{166}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5544389 = a1;
        double r5544390 = a2;
        double r5544391 = r5544389 * r5544390;
        double r5544392 = b1;
        double r5544393 = b2;
        double r5544394 = r5544392 * r5544393;
        double r5544395 = r5544391 / r5544394;
        return r5544395;
}

double f(double a1, double a2, double b1, double b2) {
        double r5544396 = a1;
        double r5544397 = a2;
        double r5544398 = r5544396 * r5544397;
        double r5544399 = -1.0591301517291211e+101;
        bool r5544400 = r5544398 <= r5544399;
        double r5544401 = 1.0;
        double r5544402 = b2;
        double r5544403 = b1;
        double r5544404 = r5544402 * r5544403;
        double r5544405 = r5544397 / r5544404;
        double r5544406 = r5544401 / r5544405;
        double r5544407 = r5544396 / r5544406;
        double r5544408 = -1.3707899263210588e-258;
        bool r5544409 = r5544398 <= r5544408;
        double r5544410 = r5544398 / r5544403;
        double r5544411 = r5544410 / r5544402;
        double r5544412 = 8.13583503545798e-234;
        bool r5544413 = r5544398 <= r5544412;
        double r5544414 = r5544396 / r5544403;
        double r5544415 = r5544402 / r5544397;
        double r5544416 = r5544414 / r5544415;
        double r5544417 = 3.246307839867652e+166;
        bool r5544418 = r5544398 <= r5544417;
        double r5544419 = r5544418 ? r5544411 : r5544407;
        double r5544420 = r5544413 ? r5544416 : r5544419;
        double r5544421 = r5544409 ? r5544411 : r5544420;
        double r5544422 = r5544400 ? r5544407 : r5544421;
        return r5544422;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -1.0591301517291211e+101 or 3.246307839867652e+166 < (* a1 a2)

    1. Initial program 25.4

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

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

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

    if -1.0591301517291211e+101 < (* a1 a2) < -1.3707899263210588e-258 or 8.13583503545798e-234 < (* a1 a2) < 3.246307839867652e+166

    1. Initial program 4.3

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

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

    if -1.3707899263210588e-258 < (* a1 a2) < 8.13583503545798e-234

    1. Initial program 16.6

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

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

      \[\leadsto \frac{a1}{\frac{b1 \cdot b2}{\color{blue}{1 \cdot a2}}}\]
    6. Applied times-frac3.2

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.059130151729121113659458114614373030793 \cdot 10^{101}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b2 \cdot b1}}}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.370789926321058777754218050252398287174 \cdot 10^{-258}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.135835035457980197152821008820896199299 \cdot 10^{-234}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.246307839867652065988411443641022946156 \cdot 10^{166}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b2 \cdot b1}}}\\ \end{array}\]

Reproduce

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

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

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