Average Error: 11.1 → 5.5
Time: 12.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.013586456865108 \cdot 10^{-95}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.1062713645792236 \cdot 10^{-164}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 7.866668139775074 \cdot 10^{-256}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2752046247109955 \cdot 10^{+283}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\
\;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\

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

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5275147 = a1;
        double r5275148 = a2;
        double r5275149 = r5275147 * r5275148;
        double r5275150 = b1;
        double r5275151 = b2;
        double r5275152 = r5275150 * r5275151;
        double r5275153 = r5275149 / r5275152;
        return r5275153;
}

double f(double a1, double a2, double b1, double b2) {
        double r5275154 = a1;
        double r5275155 = a2;
        double r5275156 = r5275154 * r5275155;
        double r5275157 = -2.1038078135654004e+219;
        bool r5275158 = r5275156 <= r5275157;
        double r5275159 = b1;
        double r5275160 = r5275155 / r5275159;
        double r5275161 = r5275154 * r5275160;
        double r5275162 = b2;
        double r5275163 = r5275161 / r5275162;
        double r5275164 = -9.013586456865108e-95;
        bool r5275165 = r5275156 <= r5275164;
        double r5275166 = 1.0;
        double r5275167 = r5275162 * r5275159;
        double r5275168 = r5275167 / r5275156;
        double r5275169 = r5275166 / r5275168;
        double r5275170 = -2.1062713645792236e-164;
        bool r5275171 = r5275156 <= r5275170;
        double r5275172 = r5275156 / r5275159;
        double r5275173 = r5275172 / r5275162;
        double r5275174 = 7.866668139775074e-256;
        bool r5275175 = r5275156 <= r5275174;
        double r5275176 = r5275155 / r5275162;
        double r5275177 = r5275154 / r5275159;
        double r5275178 = r5275176 * r5275177;
        double r5275179 = 1.2752046247109955e+283;
        bool r5275180 = r5275156 <= r5275179;
        double r5275181 = r5275180 ? r5275173 : r5275178;
        double r5275182 = r5275175 ? r5275178 : r5275181;
        double r5275183 = r5275171 ? r5275173 : r5275182;
        double r5275184 = r5275165 ? r5275169 : r5275183;
        double r5275185 = r5275158 ? r5275163 : r5275184;
        return r5275185;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -2.1038078135654004e+219

    1. Initial program 36.9

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

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

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

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

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

    if -2.1038078135654004e+219 < (* a1 a2) < -9.013586456865108e-95

    1. Initial program 3.9

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

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

    if -9.013586456865108e-95 < (* a1 a2) < -2.1062713645792236e-164 or 7.866668139775074e-256 < (* a1 a2) < 1.2752046247109955e+283

    1. Initial program 5.4

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

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

    if -2.1062713645792236e-164 < (* a1 a2) < 7.866668139775074e-256 or 1.2752046247109955e+283 < (* a1 a2)

    1. Initial program 18.7

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.1038078135654004 \cdot 10^{+219}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.013586456865108 \cdot 10^{-95}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.1062713645792236 \cdot 10^{-164}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 7.866668139775074 \cdot 10^{-256}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2752046247109955 \cdot 10^{+283}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \end{array}\]

Reproduce

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

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

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