Average Error: 11.7 → 2.4
Time: 11.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.745059537242826286535958821741347182896 \cdot 10^{-303} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.40570977703653435845644876242709169342 \cdot 10^{293}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.745059537242826286535958821741347182896 \cdot 10^{-303} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.40570977703653435845644876242709169342 \cdot 10^{293}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r160183 = a1;
        double r160184 = a2;
        double r160185 = r160183 * r160184;
        double r160186 = b1;
        double r160187 = b2;
        double r160188 = r160186 * r160187;
        double r160189 = r160185 / r160188;
        return r160189;
}

double f(double a1, double a2, double b1, double b2) {
        double r160190 = a1;
        double r160191 = a2;
        double r160192 = r160190 * r160191;
        double r160193 = b1;
        double r160194 = b2;
        double r160195 = r160193 * r160194;
        double r160196 = r160192 / r160195;
        double r160197 = -inf.0;
        bool r160198 = r160196 <= r160197;
        double r160199 = r160193 / r160191;
        double r160200 = r160190 / r160199;
        double r160201 = r160200 / r160194;
        double r160202 = -4.745059537242826e-303;
        bool r160203 = r160196 <= r160202;
        double r160204 = 0.0;
        bool r160205 = r160196 <= r160204;
        double r160206 = !r160205;
        double r160207 = 2.4057097770365344e+293;
        bool r160208 = r160196 <= r160207;
        bool r160209 = r160206 && r160208;
        bool r160210 = r160203 || r160209;
        double r160211 = r160191 / r160193;
        double r160212 = r160190 / r160194;
        double r160213 = r160211 * r160212;
        double r160214 = r160210 ? r160196 : r160213;
        double r160215 = r160198 ? r160201 : r160214;
        return r160215;
}

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

Derivation

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

    1. Initial program 64.0

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Simplified16.3

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -4.745059537242826e-303 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 2.4057097770365344e+293

    1. Initial program 3.6

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]

    if -4.745059537242826e-303 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 2.4057097770365344e+293 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 29.1

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

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

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

      \[\leadsto \frac{a1}{b1} \cdot \frac{\color{blue}{\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \sqrt[3]{a2}}}{1 \cdot b2}\]
    7. Applied times-frac4.3

      \[\leadsto \frac{a1}{b1} \cdot \color{blue}{\left(\frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{1} \cdot \frac{\sqrt[3]{a2}}{b2}\right)}\]
    8. Applied associate-*r*5.0

      \[\leadsto \color{blue}{\left(\frac{a1}{b1} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}}\]
    9. Simplified13.2

      \[\leadsto \color{blue}{\frac{a1 \cdot \left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right)}{b1}} \cdot \frac{\sqrt[3]{a2}}{b2}\]
    10. Taylor expanded around 0 29.1

      \[\leadsto \color{blue}{\frac{a1 \cdot a2}{b2 \cdot b1}}\]
    11. Simplified4.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -4.745059537242826286535958821741347182896 \cdot 10^{-303} \lor \neg \left(\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0\right) \land \frac{a1 \cdot a2}{b1 \cdot b2} \le 2.40570977703653435845644876242709169342 \cdot 10^{293}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a2}{b1} \cdot \frac{a1}{b2}\\ \end{array}\]

Reproduce

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

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

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