Average Error: 10.7 → 5.0
Time: 17.4s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.776996541214902 \cdot 10^{+242}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.2620149532156769 \cdot 10^{-221}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.0652006343350663 \cdot 10^{+179}:\\ \;\;\;\;\frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{a1}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.776996541214902 \cdot 10^{+242}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\

\mathbf{elif}\;b1 \cdot b2 \le -1.2620149532156769 \cdot 10^{-221}:\\
\;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\

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

\mathbf{elif}\;b1 \cdot b2 \le 5.0652006343350663 \cdot 10^{+179}:\\
\;\;\;\;\frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{a1}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6234170 = a1;
        double r6234171 = a2;
        double r6234172 = r6234170 * r6234171;
        double r6234173 = b1;
        double r6234174 = b2;
        double r6234175 = r6234173 * r6234174;
        double r6234176 = r6234172 / r6234175;
        return r6234176;
}

double f(double a1, double a2, double b1, double b2) {
        double r6234177 = b1;
        double r6234178 = b2;
        double r6234179 = r6234177 * r6234178;
        double r6234180 = -2.776996541214902e+242;
        bool r6234181 = r6234179 <= r6234180;
        double r6234182 = a1;
        double r6234183 = r6234182 / r6234177;
        double r6234184 = a2;
        double r6234185 = r6234178 / r6234184;
        double r6234186 = r6234183 / r6234185;
        double r6234187 = -1.2620149532156769e-221;
        bool r6234188 = r6234179 <= r6234187;
        double r6234189 = 1.0;
        double r6234190 = r6234184 / r6234179;
        double r6234191 = r6234189 / r6234190;
        double r6234192 = r6234182 / r6234191;
        double r6234193 = -0.0;
        bool r6234194 = r6234179 <= r6234193;
        double r6234195 = 5.0652006343350663e+179;
        bool r6234196 = r6234179 <= r6234195;
        double r6234197 = r6234179 / r6234184;
        double r6234198 = r6234197 / r6234182;
        double r6234199 = r6234189 / r6234198;
        double r6234200 = r6234196 ? r6234199 : r6234186;
        double r6234201 = r6234194 ? r6234186 : r6234200;
        double r6234202 = r6234188 ? r6234192 : r6234201;
        double r6234203 = r6234181 ? r6234186 : r6234202;
        return r6234203;
}

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

Original10.7
Target10.8
Herbie5.0
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* b1 b2) < -2.776996541214902e+242 or -1.2620149532156769e-221 < (* b1 b2) < -0.0 or 5.0652006343350663e+179 < (* b1 b2)

    1. Initial program 21.5

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Simplified9.3

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

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

    if -2.776996541214902e+242 < (* b1 b2) < -1.2620149532156769e-221

    1. Initial program 4.6

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

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

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

    if -0.0 < (* b1 b2) < 5.0652006343350663e+179

    1. Initial program 5.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.776996541214902 \cdot 10^{+242}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.2620149532156769 \cdot 10^{-221}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.0652006343350663 \cdot 10^{+179}:\\ \;\;\;\;\frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{a1}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \end{array}\]

Reproduce

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

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

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