Average Error: 10.8 → 4.8
Time: 11.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 = -\infty:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -6.848939379187657 \cdot 10^{-209}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.9817388408212 \cdot 10^{-316}:\\ \;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\ \mathbf{elif}\;a1 \cdot a2 \le 7.101110806155063 \cdot 10^{+218}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 = -\infty:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\

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

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

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

\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right) \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2041816 = a1;
        double r2041817 = a2;
        double r2041818 = r2041816 * r2041817;
        double r2041819 = b1;
        double r2041820 = b2;
        double r2041821 = r2041819 * r2041820;
        double r2041822 = r2041818 / r2041821;
        return r2041822;
}

double f(double a1, double a2, double b1, double b2) {
        double r2041823 = a1;
        double r2041824 = a2;
        double r2041825 = r2041823 * r2041824;
        double r2041826 = -inf.0;
        bool r2041827 = r2041825 <= r2041826;
        double r2041828 = b1;
        double r2041829 = r2041824 / r2041828;
        double r2041830 = b2;
        double r2041831 = r2041829 / r2041830;
        double r2041832 = r2041823 * r2041831;
        double r2041833 = -6.848939379187657e-209;
        bool r2041834 = r2041825 <= r2041833;
        double r2041835 = r2041830 * r2041828;
        double r2041836 = r2041825 / r2041835;
        double r2041837 = 8.9817388408212e-316;
        bool r2041838 = r2041825 <= r2041837;
        double r2041839 = cbrt(r2041823);
        double r2041840 = r2041839 * r2041839;
        double r2041841 = r2041839 / r2041828;
        double r2041842 = r2041824 / r2041830;
        double r2041843 = r2041841 * r2041842;
        double r2041844 = r2041840 * r2041843;
        double r2041845 = 7.101110806155063e+218;
        bool r2041846 = r2041825 <= r2041845;
        double r2041847 = r2041825 / r2041828;
        double r2041848 = r2041847 / r2041830;
        double r2041849 = r2041846 ? r2041848 : r2041844;
        double r2041850 = r2041838 ? r2041844 : r2041849;
        double r2041851 = r2041834 ? r2041836 : r2041850;
        double r2041852 = r2041827 ? r2041832 : r2041851;
        return r2041852;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -inf.0

    1. Initial program 61.0

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

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

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

      \[\leadsto \color{blue}{a1 \cdot \left(\frac{1}{b1} \cdot \frac{a2}{b2}\right)}\]
    7. Simplified5.2

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

    if -inf.0 < (* a1 a2) < -6.848939379187657e-209

    1. Initial program 4.5

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

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

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

      \[\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-frac14.4

      \[\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*13.2

      \[\leadsto \color{blue}{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)}\]
    9. Taylor expanded around inf 4.5

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

    if -6.848939379187657e-209 < (* a1 a2) < 8.9817388408212e-316 or 7.101110806155063e+218 < (* a1 a2)

    1. Initial program 21.5

      \[\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}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity5.3

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

      \[\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-frac5.8

      \[\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*4.3

      \[\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) < 7.101110806155063e+218

    1. Initial program 4.8

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

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

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

Reproduce

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

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

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