Average Error: 11.1 → 3.7
Time: 26.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.2640381336687406 \cdot 10^{-291}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.738750803985727 \cdot 10^{+303}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.2640381336687406 \cdot 10^{-291}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6223349 = a1;
        double r6223350 = a2;
        double r6223351 = r6223349 * r6223350;
        double r6223352 = b1;
        double r6223353 = b2;
        double r6223354 = r6223352 * r6223353;
        double r6223355 = r6223351 / r6223354;
        return r6223355;
}

double f(double a1, double a2, double b1, double b2) {
        double r6223356 = a1;
        double r6223357 = a2;
        double r6223358 = r6223356 * r6223357;
        double r6223359 = b1;
        double r6223360 = b2;
        double r6223361 = r6223359 * r6223360;
        double r6223362 = r6223358 / r6223361;
        double r6223363 = -2.2640381336687406e-291;
        bool r6223364 = r6223362 <= r6223363;
        double r6223365 = 0.0;
        bool r6223366 = r6223362 <= r6223365;
        double r6223367 = r6223356 / r6223359;
        double r6223368 = r6223357 / r6223360;
        double r6223369 = r6223367 * r6223368;
        double r6223370 = 5.738750803985727e+303;
        bool r6223371 = r6223362 <= r6223370;
        double r6223372 = r6223356 / r6223360;
        double r6223373 = r6223357 / r6223359;
        double r6223374 = r6223372 * r6223373;
        double r6223375 = r6223371 ? r6223362 : r6223374;
        double r6223376 = r6223366 ? r6223369 : r6223375;
        double r6223377 = r6223364 ? r6223362 : r6223376;
        return r6223377;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -2.2640381336687406e-291 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 5.738750803985727e+303

    1. Initial program 4.0

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]

    if -2.2640381336687406e-291 < (/ (* a1 a2) (* b1 b2)) < 0.0

    1. Initial program 13.3

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

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

    if 5.738750803985727e+303 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 60.8

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

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

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

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

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

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

      \[\leadsto 1 \cdot \color{blue}{\frac{a2}{\frac{b1}{\frac{a1}{b2}}}}\]
    10. Using strategy rm
    11. Applied associate-/r/6.0

      \[\leadsto 1 \cdot \color{blue}{\left(\frac{a2}{b1} \cdot \frac{a1}{b2}\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification3.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -2.2640381336687406 \cdot 10^{-291}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 5.738750803985727 \cdot 10^{+303}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\ \end{array}\]

Reproduce

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

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

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