Average Error: 11.5 → 5.6
Time: 25.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.211761671392944 \cdot 10^{-166}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2729110264349966 \cdot 10^{+141}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\

\mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 1.2729110264349966 \cdot 10^{+141}:\\
\;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5956084 = a1;
        double r5956085 = a2;
        double r5956086 = r5956084 * r5956085;
        double r5956087 = b1;
        double r5956088 = b2;
        double r5956089 = r5956087 * r5956088;
        double r5956090 = r5956086 / r5956089;
        return r5956090;
}

double f(double a1, double a2, double b1, double b2) {
        double r5956091 = a1;
        double r5956092 = a2;
        double r5956093 = r5956091 * r5956092;
        double r5956094 = -8.29796578676969e+222;
        bool r5956095 = r5956093 <= r5956094;
        double r5956096 = b2;
        double r5956097 = r5956091 / r5956096;
        double r5956098 = b1;
        double r5956099 = r5956097 / r5956098;
        double r5956100 = r5956099 * r5956092;
        double r5956101 = -2.7996586332702162e-300;
        bool r5956102 = r5956093 <= r5956101;
        double r5956103 = 1.0;
        double r5956104 = r5956103 / r5956096;
        double r5956105 = r5956104 / r5956098;
        double r5956106 = r5956093 * r5956105;
        double r5956107 = 8.211761671392944e-166;
        bool r5956108 = r5956093 <= r5956107;
        double r5956109 = r5956098 / r5956091;
        double r5956110 = r5956096 / r5956092;
        double r5956111 = r5956109 * r5956110;
        double r5956112 = r5956103 / r5956111;
        double r5956113 = 1.2729110264349966e+141;
        bool r5956114 = r5956093 <= r5956113;
        double r5956115 = r5956114 ? r5956106 : r5956100;
        double r5956116 = r5956108 ? r5956112 : r5956115;
        double r5956117 = r5956102 ? r5956106 : r5956116;
        double r5956118 = r5956095 ? r5956100 : r5956117;
        return r5956118;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -8.29796578676969e+222 or 1.2729110264349966e+141 < (* a1 a2)

    1. Initial program 33.1

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

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

      \[\leadsto \frac{1}{\color{blue}{\left(b1 \cdot b2\right) \cdot \frac{1}{a1 \cdot a2}}}\]
    6. Applied add-cube-cbrt33.2

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

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

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

      \[\leadsto \frac{\frac{1}{b2}}{b1} \cdot \color{blue}{\left(a1 \cdot a2\right)}\]
    10. Using strategy rm
    11. Applied associate-*r*17.2

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

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

    if -8.29796578676969e+222 < (* a1 a2) < -2.7996586332702162e-300 or 8.211761671392944e-166 < (* a1 a2) < 1.2729110264349966e+141

    1. Initial program 4.5

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num4.8

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

      \[\leadsto \frac{1}{\color{blue}{\left(b1 \cdot b2\right) \cdot \frac{1}{a1 \cdot a2}}}\]
    6. Applied add-cube-cbrt4.9

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

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

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

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

    if -2.7996586332702162e-300 < (* a1 a2) < 8.211761671392944e-166

    1. Initial program 15.4

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num15.6

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.29796578676969 \cdot 10^{+222}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;a1 \cdot a2 \le -2.7996586332702162 \cdot 10^{-300}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 8.211761671392944 \cdot 10^{-166}:\\ \;\;\;\;\frac{1}{\frac{b1}{a1} \cdot \frac{b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.2729110264349966 \cdot 10^{+141}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b2}}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \end{array}\]

Reproduce

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

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

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