Average Error: 11.1 → 6.2
Time: 10.0s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.253412862125128 \cdot 10^{-103}:\\ \;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 1.1528569429778148 \cdot 10^{+56}:\\ \;\;\;\;\frac{a2 \cdot a1}{b1 \cdot b2}\\ \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 = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2828094 = a1;
        double r2828095 = a2;
        double r2828096 = r2828094 * r2828095;
        double r2828097 = b1;
        double r2828098 = b2;
        double r2828099 = r2828097 * r2828098;
        double r2828100 = r2828096 / r2828099;
        return r2828100;
}

double f(double a1, double a2, double b1, double b2) {
        double r2828101 = b1;
        double r2828102 = b2;
        double r2828103 = r2828101 * r2828102;
        double r2828104 = -inf.0;
        bool r2828105 = r2828103 <= r2828104;
        double r2828106 = a1;
        double r2828107 = r2828106 / r2828101;
        double r2828108 = a2;
        double r2828109 = r2828108 / r2828102;
        double r2828110 = r2828107 * r2828109;
        double r2828111 = -2.253412862125128e-103;
        bool r2828112 = r2828103 <= r2828111;
        double r2828113 = r2828106 / r2828103;
        double r2828114 = 1.0;
        double r2828115 = r2828114 / r2828108;
        double r2828116 = r2828113 / r2828115;
        double r2828117 = -0.0;
        bool r2828118 = r2828103 <= r2828117;
        double r2828119 = r2828102 / r2828108;
        double r2828120 = r2828106 / r2828119;
        double r2828121 = r2828114 / r2828101;
        double r2828122 = r2828120 * r2828121;
        double r2828123 = 1.1528569429778148e+56;
        bool r2828124 = r2828103 <= r2828123;
        double r2828125 = r2828108 * r2828106;
        double r2828126 = r2828125 / r2828103;
        double r2828127 = r2828107 / r2828119;
        double r2828128 = r2828124 ? r2828126 : r2828127;
        double r2828129 = r2828118 ? r2828122 : r2828128;
        double r2828130 = r2828112 ? r2828116 : r2828129;
        double r2828131 = r2828105 ? r2828110 : r2828130;
        return r2828131;
}

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

Derivation

  1. Split input into 5 regimes
  2. if (* b1 b2) < -inf.0

    1. Initial program 22.1

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

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

    if -inf.0 < (* b1 b2) < -2.253412862125128e-103

    1. Initial program 4.7

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

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

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

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

    if -2.253412862125128e-103 < (* b1 b2) < -0.0

    1. Initial program 28.8

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Applied *-un-lft-identity13.9

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

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

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

    if -0.0 < (* b1 b2) < 1.1528569429778148e+56

    1. Initial program 5.8

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

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Taylor expanded around inf 5.8

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

    if 1.1528569429778148e+56 < (* b1 b2)

    1. Initial program 10.3

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Applied associate-/r*7.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.253412862125128 \cdot 10^{-103}:\\ \;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2}} \cdot \frac{1}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 1.1528569429778148 \cdot 10^{+56}:\\ \;\;\;\;\frac{a2 \cdot a1}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \end{array}\]

Reproduce

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

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

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