Average Error: 11.2 → 7.4
Time: 3.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -3.21552553834883066 \cdot 10^{-111}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.9910435712265866 \cdot 10^{-165}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.34799870317304565 \cdot 10^{177}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -3.21552553834883066 \cdot 10^{-111}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\

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

\mathbf{elif}\;b1 \cdot b2 \le 7.34799870317304565 \cdot 10^{177}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r140213 = a1;
        double r140214 = a2;
        double r140215 = r140213 * r140214;
        double r140216 = b1;
        double r140217 = b2;
        double r140218 = r140216 * r140217;
        double r140219 = r140215 / r140218;
        return r140219;
}

double f(double a1, double a2, double b1, double b2) {
        double r140220 = b1;
        double r140221 = b2;
        double r140222 = r140220 * r140221;
        double r140223 = -3.2155255383488307e-111;
        bool r140224 = r140222 <= r140223;
        double r140225 = 1.0;
        double r140226 = a1;
        double r140227 = a2;
        double r140228 = r140226 * r140227;
        double r140229 = r140222 / r140228;
        double r140230 = r140225 / r140229;
        double r140231 = 4.991043571226587e-165;
        bool r140232 = r140222 <= r140231;
        double r140233 = r140226 / r140220;
        double r140234 = r140227 / r140221;
        double r140235 = r140233 * r140234;
        double r140236 = 7.347998703173046e+177;
        bool r140237 = r140222 <= r140236;
        double r140238 = r140226 * r140234;
        double r140239 = r140238 / r140220;
        double r140240 = r140237 ? r140230 : r140239;
        double r140241 = r140232 ? r140235 : r140240;
        double r140242 = r140224 ? r140230 : r140241;
        return r140242;
}

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.2
Target11.1
Herbie7.4
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* b1 b2) < -3.2155255383488307e-111 or 4.991043571226587e-165 < (* b1 b2) < 7.347998703173046e+177

    1. Initial program 6.5

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

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

    if -3.2155255383488307e-111 < (* b1 b2) < 4.991043571226587e-165

    1. Initial program 23.4

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

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

    if 7.347998703173046e+177 < (* b1 b2)

    1. Initial program 15.4

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -3.21552553834883066 \cdot 10^{-111}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.9910435712265866 \cdot 10^{-165}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.34799870317304565 \cdot 10^{177}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \end{array}\]

Reproduce

herbie shell --seed 2020059 +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"
  :precision binary64

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

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