Average Error: 11.6 → 4.6
Time: 11.4s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\ \;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\ \mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.74006580620091934483000099877771584647 \cdot 10^{-320}:\\ \;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.58951826059365596639353360952197188632 \cdot 10^{173}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\

\mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\

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

\mathbf{elif}\;b1 \cdot b2 \le 2.58951826059365596639353360952197188632 \cdot 10^{173}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r78161 = a1;
        double r78162 = a2;
        double r78163 = r78161 * r78162;
        double r78164 = b1;
        double r78165 = b2;
        double r78166 = r78164 * r78165;
        double r78167 = r78163 / r78166;
        return r78167;
}

double f(double a1, double a2, double b1, double b2) {
        double r78168 = b1;
        double r78169 = b2;
        double r78170 = r78168 * r78169;
        double r78171 = -9.786216370120351e+209;
        bool r78172 = r78170 <= r78171;
        double r78173 = 1.0;
        double r78174 = a2;
        double r78175 = r78169 / r78174;
        double r78176 = a1;
        double r78177 = r78175 / r78176;
        double r78178 = r78168 * r78177;
        double r78179 = r78173 / r78178;
        double r78180 = -9.111280530104685e-184;
        bool r78181 = r78170 <= r78180;
        double r78182 = cbrt(r78176);
        double r78183 = r78182 * r78182;
        double r78184 = r78183 / r78170;
        double r78185 = r78173 / r78174;
        double r78186 = r78185 / r78182;
        double r78187 = r78184 / r78186;
        double r78188 = 4.7400658062009e-320;
        bool r78189 = r78170 <= r78188;
        double r78190 = 2.589518260593656e+173;
        bool r78191 = r78170 <= r78190;
        double r78192 = r78176 / r78168;
        double r78193 = r78174 / r78169;
        double r78194 = r78192 * r78193;
        double r78195 = r78191 ? r78187 : r78194;
        double r78196 = r78189 ? r78179 : r78195;
        double r78197 = r78181 ? r78187 : r78196;
        double r78198 = r78172 ? r78179 : r78197;
        return r78198;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* b1 b2) < -9.786216370120351e+209 or -9.111280530104685e-184 < (* b1 b2) < 4.7400658062009e-320

    1. Initial program 25.7

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

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

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

      \[\leadsto \frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{\color{blue}{1 \cdot a1}}}\]
    8. Applied *-un-lft-identity25.4

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

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

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

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

    if -9.786216370120351e+209 < (* b1 b2) < -9.111280530104685e-184 or 4.7400658062009e-320 < (* b1 b2) < 2.589518260593656e+173

    1. Initial program 5.2

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

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

      \[\leadsto \color{blue}{\frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{a1}}}\]
    6. Using strategy rm
    7. Applied add-cube-cbrt6.2

      \[\leadsto \frac{1}{\frac{\frac{b1 \cdot b2}{a2}}{\color{blue}{\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \sqrt[3]{a1}}}}\]
    8. Applied div-inv6.2

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

      \[\leadsto \frac{1}{\color{blue}{\frac{b1 \cdot b2}{\sqrt[3]{a1} \cdot \sqrt[3]{a1}} \cdot \frac{\frac{1}{a2}}{\sqrt[3]{a1}}}}\]
    10. Applied associate-/r*3.6

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

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

    if 2.589518260593656e+173 < (* b1 b2)

    1. Initial program 16.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\ \;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\ \mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.74006580620091934483000099877771584647 \cdot 10^{-320}:\\ \;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.58951826059365596639353360952197188632 \cdot 10^{173}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{b1 \cdot b2}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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