Average Error: 11.5 → 3.2
Time: 8.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.2806 \cdot 10^{-321}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.94900822412695729 \cdot 10^{206}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r130202 = a1;
        double r130203 = a2;
        double r130204 = r130202 * r130203;
        double r130205 = b1;
        double r130206 = b2;
        double r130207 = r130205 * r130206;
        double r130208 = r130204 / r130207;
        return r130208;
}

double f(double a1, double a2, double b1, double b2) {
        double r130209 = a1;
        double r130210 = a2;
        double r130211 = r130209 * r130210;
        double r130212 = b1;
        double r130213 = b2;
        double r130214 = r130212 * r130213;
        double r130215 = r130211 / r130214;
        double r130216 = -inf.0;
        bool r130217 = r130215 <= r130216;
        double r130218 = r130209 / r130212;
        double r130219 = r130210 / r130213;
        double r130220 = r130218 * r130219;
        double r130221 = -3.2805958883859e-321;
        bool r130222 = r130215 <= r130221;
        double r130223 = -0.0;
        bool r130224 = r130215 <= r130223;
        double r130225 = r130212 / r130219;
        double r130226 = r130209 / r130225;
        double r130227 = 4.949008224126957e+206;
        bool r130228 = r130215 <= r130227;
        double r130229 = r130228 ? r130215 : r130220;
        double r130230 = r130224 ? r130226 : r130229;
        double r130231 = r130222 ? r130215 : r130230;
        double r130232 = r130217 ? r130220 : r130231;
        return r130232;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 4.949008224126957e+206 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 48.4

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -3.2805958883859e-321 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 4.949008224126957e+206

    1. Initial program 3.9

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

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1 \cdot a2}{b2}}}{b1}\]
    8. Using strategy rm
    9. Applied div-inv7.3

      \[\leadsto \frac{\color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b2}}}{b1}\]
    10. Applied associate-/l*4.0

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

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

    if -3.2805958883859e-321 < (/ (* a1 a2) (* b1 b2)) < -0.0

    1. Initial program 13.2

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

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

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

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{1} \cdot \frac{a2}{b2}}}{b1}\]
    11. Applied associate-/l*3.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -3.2806 \cdot 10^{-321}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 4.94900822412695729 \cdot 10^{206}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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