Average Error: 10.8 → 5.4
Time: 14.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -6.245903185019271 \cdot 10^{+204}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -6.848939379187657 \cdot 10^{-209}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\ \;\;\;\;\left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \mathbf{elif}\;a1 \cdot a2 \le 1.0693629293958468 \cdot 10^{+158}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -6.245903185019271 \cdot 10^{+204}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\
\;\;\;\;\left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r4758471 = a1;
        double r4758472 = a2;
        double r4758473 = r4758471 * r4758472;
        double r4758474 = b1;
        double r4758475 = b2;
        double r4758476 = r4758474 * r4758475;
        double r4758477 = r4758473 / r4758476;
        return r4758477;
}

double f(double a1, double a2, double b1, double b2) {
        double r4758478 = a1;
        double r4758479 = a2;
        double r4758480 = r4758478 * r4758479;
        double r4758481 = -6.245903185019271e+204;
        bool r4758482 = r4758480 <= r4758481;
        double r4758483 = b1;
        double r4758484 = r4758478 / r4758483;
        double r4758485 = b2;
        double r4758486 = r4758479 / r4758485;
        double r4758487 = r4758484 * r4758486;
        double r4758488 = -6.848939379187657e-209;
        bool r4758489 = r4758480 <= r4758488;
        double r4758490 = 1.0;
        double r4758491 = r4758485 * r4758483;
        double r4758492 = r4758491 / r4758480;
        double r4758493 = r4758490 / r4758492;
        double r4758494 = 8.9817388408212e-316;
        bool r4758495 = r4758480 <= r4758494;
        double r4758496 = cbrt(r4758478);
        double r4758497 = r4758496 / r4758483;
        double r4758498 = r4758497 * r4758486;
        double r4758499 = r4758496 * r4758496;
        double r4758500 = r4758498 * r4758499;
        double r4758501 = 1.0693629293958468e+158;
        bool r4758502 = r4758480 <= r4758501;
        double r4758503 = r4758480 / r4758483;
        double r4758504 = r4758503 / r4758485;
        double r4758505 = r4758502 ? r4758504 : r4758487;
        double r4758506 = r4758495 ? r4758500 : r4758505;
        double r4758507 = r4758489 ? r4758493 : r4758506;
        double r4758508 = r4758482 ? r4758487 : r4758507;
        return r4758508;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -6.245903185019271e+204 or 1.0693629293958468e+158 < (* a1 a2)

    1. Initial program 29.3

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

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

    if -6.245903185019271e+204 < (* a1 a2) < -6.848939379187657e-209

    1. Initial program 3.9

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

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

    if -6.848939379187657e-209 < (* a1 a2) < 8.9817388408212e-316

    1. Initial program 17.6

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

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

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

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

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

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

    if 8.9817388408212e-316 < (* a1 a2) < 1.0693629293958468e+158

    1. Initial program 4.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -6.245903185019271 \cdot 10^{+204}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -6.848939379187657 \cdot 10^{-209}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\ \;\;\;\;\left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \mathbf{elif}\;a1 \cdot a2 \le 1.0693629293958468 \cdot 10^{+158}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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