Average Error: 11.6 → 5.0
Time: 9.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.295262739202245039131130912309167502672 \cdot 10^{244}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.007504316727393710931951094013571648268 \cdot 10^{-192}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.005070037874945688454093389847452370632 \cdot 10^{-123}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.152278219639707545525802866459256457129 \cdot 10^{229}:\\ \;\;\;\;\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 -4.295262739202245039131130912309167502672 \cdot 10^{244}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 4.152278219639707545525802866459256457129 \cdot 10^{229}:\\
\;\;\;\;\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 r68871 = a1;
        double r68872 = a2;
        double r68873 = r68871 * r68872;
        double r68874 = b1;
        double r68875 = b2;
        double r68876 = r68874 * r68875;
        double r68877 = r68873 / r68876;
        return r68877;
}

double f(double a1, double a2, double b1, double b2) {
        double r68878 = a1;
        double r68879 = a2;
        double r68880 = r68878 * r68879;
        double r68881 = -4.295262739202245e+244;
        bool r68882 = r68880 <= r68881;
        double r68883 = b1;
        double r68884 = r68878 / r68883;
        double r68885 = b2;
        double r68886 = r68879 / r68885;
        double r68887 = r68884 * r68886;
        double r68888 = -2.0075043167273937e-192;
        bool r68889 = r68880 <= r68888;
        double r68890 = r68880 / r68883;
        double r68891 = r68890 / r68885;
        double r68892 = 4.005070037874946e-123;
        bool r68893 = r68880 <= r68892;
        double r68894 = cbrt(r68885);
        double r68895 = r68894 * r68894;
        double r68896 = r68878 / r68895;
        double r68897 = r68879 / r68883;
        double r68898 = r68897 / r68894;
        double r68899 = r68896 * r68898;
        double r68900 = 4.1522782196397075e+229;
        bool r68901 = r68880 <= r68900;
        double r68902 = r68901 ? r68891 : r68887;
        double r68903 = r68893 ? r68899 : r68902;
        double r68904 = r68889 ? r68891 : r68903;
        double r68905 = r68882 ? r68887 : r68904;
        return r68905;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -4.295262739202245e+244 or 4.1522782196397075e+229 < (* a1 a2)

    1. Initial program 42.5

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

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

    if -4.295262739202245e+244 < (* a1 a2) < -2.0075043167273937e-192 or 4.005070037874946e-123 < (* a1 a2) < 4.1522782196397075e+229

    1. Initial program 4.8

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

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

      \[\leadsto \frac{\color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}}{b2}\]
    6. Using strategy rm
    7. Applied pow14.6

      \[\leadsto \frac{\left(a1 \cdot a2\right) \cdot \color{blue}{{\left(\frac{1}{b1}\right)}^{1}}}{b2}\]
    8. Applied pow14.6

      \[\leadsto \frac{\left(a1 \cdot \color{blue}{{a2}^{1}}\right) \cdot {\left(\frac{1}{b1}\right)}^{1}}{b2}\]
    9. Applied pow14.6

      \[\leadsto \frac{\left(\color{blue}{{a1}^{1}} \cdot {a2}^{1}\right) \cdot {\left(\frac{1}{b1}\right)}^{1}}{b2}\]
    10. Applied pow-prod-down4.6

      \[\leadsto \frac{\color{blue}{{\left(a1 \cdot a2\right)}^{1}} \cdot {\left(\frac{1}{b1}\right)}^{1}}{b2}\]
    11. Applied pow-prod-down4.6

      \[\leadsto \frac{\color{blue}{{\left(\left(a1 \cdot a2\right) \cdot \frac{1}{b1}\right)}^{1}}}{b2}\]
    12. Simplified4.5

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

    if -2.0075043167273937e-192 < (* a1 a2) < 4.005070037874946e-123

    1. Initial program 13.7

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{\left(\sqrt[3]{b2} \cdot \sqrt[3]{b2}\right) \cdot \sqrt[3]{b2}}}\]
    6. Applied *-un-lft-identity13.5

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.295262739202245039131130912309167502672 \cdot 10^{244}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.007504316727393710931951094013571648268 \cdot 10^{-192}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.005070037874945688454093389847452370632 \cdot 10^{-123}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{a2}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.152278219639707545525802866459256457129 \cdot 10^{229}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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