Average Error: 11.0 → 5.2
Time: 17.6s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -1.4533836186065774 \cdot 10^{+266}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -5.538350108544492 \cdot 10^{-165}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 4.167031796800163 \cdot 10^{-112}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.502269201920732 \cdot 10^{+155}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -1.4533836186065774 \cdot 10^{+266}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\

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

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

\mathbf{elif}\;b1 \cdot b2 \le 4.502269201920732 \cdot 10^{+155}:\\
\;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r4913768 = a1;
        double r4913769 = a2;
        double r4913770 = r4913768 * r4913769;
        double r4913771 = b1;
        double r4913772 = b2;
        double r4913773 = r4913771 * r4913772;
        double r4913774 = r4913770 / r4913773;
        return r4913774;
}

double f(double a1, double a2, double b1, double b2) {
        double r4913775 = b1;
        double r4913776 = b2;
        double r4913777 = r4913775 * r4913776;
        double r4913778 = -1.4533836186065774e+266;
        bool r4913779 = r4913777 <= r4913778;
        double r4913780 = a1;
        double r4913781 = r4913780 / r4913775;
        double r4913782 = a2;
        double r4913783 = r4913776 / r4913782;
        double r4913784 = r4913781 / r4913783;
        double r4913785 = -5.538350108544492e-165;
        bool r4913786 = r4913777 <= r4913785;
        double r4913787 = r4913780 / r4913777;
        double r4913788 = r4913787 * r4913782;
        double r4913789 = 4.167031796800163e-112;
        bool r4913790 = r4913777 <= r4913789;
        double r4913791 = cbrt(r4913782);
        double r4913792 = r4913776 / r4913791;
        double r4913793 = r4913780 / r4913792;
        double r4913794 = r4913791 * r4913791;
        double r4913795 = r4913794 / r4913775;
        double r4913796 = r4913793 * r4913795;
        double r4913797 = 4.502269201920732e+155;
        bool r4913798 = r4913777 <= r4913797;
        double r4913799 = 1.0;
        double r4913800 = r4913782 / r4913777;
        double r4913801 = r4913799 / r4913800;
        double r4913802 = r4913780 / r4913801;
        double r4913803 = r4913798 ? r4913802 : r4913796;
        double r4913804 = r4913790 ? r4913796 : r4913803;
        double r4913805 = r4913786 ? r4913788 : r4913804;
        double r4913806 = r4913779 ? r4913784 : r4913805;
        return r4913806;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* b1 b2) < -1.4533836186065774e+266

    1. Initial program 19.4

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Applied associate-/r*3.5

      \[\leadsto \color{blue}{\frac{\frac{a1}{\frac{b1}{1}}}{\frac{b2}{a2}}}\]
    8. Simplified3.5

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

    if -1.4533836186065774e+266 < (* b1 b2) < -5.538350108544492e-165

    1. Initial program 4.6

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

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Using strategy rm
    5. Applied associate-/r/4.4

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

    if -5.538350108544492e-165 < (* b1 b2) < 4.167031796800163e-112 or 4.502269201920732e+155 < (* b1 b2)

    1. Initial program 18.7

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{\sqrt[3]{a2} \cdot \sqrt[3]{a2}} \cdot \frac{b2}{\sqrt[3]{a2}}}}\]
    7. Applied *-un-lft-identity11.8

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

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

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

    if 4.167031796800163e-112 < (* b1 b2) < 4.502269201920732e+155

    1. Initial program 3.0

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -1.4533836186065774 \cdot 10^{+266}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le -5.538350108544492 \cdot 10^{-165}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 4.167031796800163 \cdot 10^{-112}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 4.502269201920732 \cdot 10^{+155}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \end{array}\]

Reproduce

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

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

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