Average Error: 11.6 → 4.6
Time: 10.9s
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 r77040 = a1;
        double r77041 = a2;
        double r77042 = r77040 * r77041;
        double r77043 = b1;
        double r77044 = b2;
        double r77045 = r77043 * r77044;
        double r77046 = r77042 / r77045;
        return r77046;
}

double f(double a1, double a2, double b1, double b2) {
        double r77047 = b1;
        double r77048 = b2;
        double r77049 = r77047 * r77048;
        double r77050 = -9.786216370120351e+209;
        bool r77051 = r77049 <= r77050;
        double r77052 = 1.0;
        double r77053 = a2;
        double r77054 = r77048 / r77053;
        double r77055 = a1;
        double r77056 = r77054 / r77055;
        double r77057 = r77047 * r77056;
        double r77058 = r77052 / r77057;
        double r77059 = -9.111280530104685e-184;
        bool r77060 = r77049 <= r77059;
        double r77061 = cbrt(r77055);
        double r77062 = r77061 * r77061;
        double r77063 = r77062 / r77049;
        double r77064 = r77052 / r77053;
        double r77065 = r77064 / r77061;
        double r77066 = r77063 / r77065;
        double r77067 = 4.7400658062009e-320;
        bool r77068 = r77049 <= r77067;
        double r77069 = 2.589518260593656e+173;
        bool r77070 = r77049 <= r77069;
        double r77071 = r77055 / r77047;
        double r77072 = r77053 / r77048;
        double r77073 = r77071 * r77072;
        double r77074 = r77070 ? r77066 : r77073;
        double r77075 = r77068 ? r77058 : r77074;
        double r77076 = r77060 ? r77066 : r77075;
        double r77077 = r77051 ? r77058 : r77076;
        return r77077;
}

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)))