Average Error: 11.5 → 2.3
Time: 4.6s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.356672191202089856632868574789828922924 \cdot 10^{302}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -6.627043998342215562621926848971746206689 \cdot 10^{-272}:\\ \;\;\;\;\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 6.467713212022452866787113437472850598121 \cdot 10^{306}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.356672191202089856632868574789828922924 \cdot 10^{302}:\\
\;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -6.627043998342215562621926848971746206689 \cdot 10^{-272}:\\
\;\;\;\;\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 6.467713212022452866787113437472850598121 \cdot 10^{306}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r125284 = a1;
        double r125285 = a2;
        double r125286 = r125284 * r125285;
        double r125287 = b1;
        double r125288 = b2;
        double r125289 = r125287 * r125288;
        double r125290 = r125286 / r125289;
        return r125290;
}

double f(double a1, double a2, double b1, double b2) {
        double r125291 = a1;
        double r125292 = a2;
        double r125293 = r125291 * r125292;
        double r125294 = b1;
        double r125295 = b2;
        double r125296 = r125294 * r125295;
        double r125297 = r125293 / r125296;
        double r125298 = -8.35667219120209e+302;
        bool r125299 = r125297 <= r125298;
        double r125300 = 1.0;
        double r125301 = r125294 / r125291;
        double r125302 = r125295 / r125292;
        double r125303 = r125301 * r125302;
        double r125304 = r125300 / r125303;
        double r125305 = -6.627043998342216e-272;
        bool r125306 = r125297 <= r125305;
        double r125307 = 0.0;
        bool r125308 = r125297 <= r125307;
        double r125309 = r125291 / r125294;
        double r125310 = r125292 / r125295;
        double r125311 = r125309 * r125310;
        double r125312 = 6.467713212022453e+306;
        bool r125313 = r125297 <= r125312;
        double r125314 = r125313 ? r125297 : r125304;
        double r125315 = r125308 ? r125311 : r125314;
        double r125316 = r125306 ? r125297 : r125315;
        double r125317 = r125299 ? r125304 : r125316;
        return r125317;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -8.35667219120209e+302 or 6.467713212022453e+306 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 63.1

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

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

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

    if -8.35667219120209e+302 < (/ (* a1 a2) (* b1 b2)) < -6.627043998342216e-272 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 6.467713212022453e+306

    1. Initial program 3.6

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

      \[\leadsto \color{blue}{\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}}\]
    4. Taylor expanded around 0 3.6

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

    if -6.627043998342216e-272 < (/ (* a1 a2) (* b1 b2)) < 0.0

    1. Initial program 12.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.356672191202089856632868574789828922924 \cdot 10^{302}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -6.627043998342215562621926848971746206689 \cdot 10^{-272}:\\ \;\;\;\;\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 6.467713212022452866787113437472850598121 \cdot 10^{306}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \end{array}\]

Reproduce

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

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

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