Average Error: 11.4 → 5.4
Time: 37.0s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.577332261011133 \cdot 10^{-120}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1107718134298 \cdot 10^{-217}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.378312823211572 \cdot 10^{+229}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
double f(double a1, double a2, double b1, double b2) {
        double r21057794 = a1;
        double r21057795 = a2;
        double r21057796 = r21057794 * r21057795;
        double r21057797 = b1;
        double r21057798 = b2;
        double r21057799 = r21057797 * r21057798;
        double r21057800 = r21057796 / r21057799;
        return r21057800;
}

double f(double a1, double a2, double b1, double b2) {
        double r21057801 = b1;
        double r21057802 = b2;
        double r21057803 = r21057801 * r21057802;
        double r21057804 = -4.967958916173717e+118;
        bool r21057805 = r21057803 <= r21057804;
        double r21057806 = a1;
        double r21057807 = a2;
        double r21057808 = cbrt(r21057807);
        double r21057809 = r21057802 / r21057808;
        double r21057810 = r21057806 / r21057809;
        double r21057811 = r21057808 * r21057808;
        double r21057812 = r21057811 / r21057801;
        double r21057813 = r21057810 * r21057812;
        double r21057814 = -2.577332261011133e-120;
        bool r21057815 = r21057803 <= r21057814;
        double r21057816 = r21057806 / r21057803;
        double r21057817 = r21057816 * r21057807;
        double r21057818 = 2.1107718134298e-217;
        bool r21057819 = r21057803 <= r21057818;
        double r21057820 = r21057806 / r21057802;
        double r21057821 = r21057807 * r21057820;
        double r21057822 = r21057821 / r21057801;
        double r21057823 = 7.378312823211572e+229;
        bool r21057824 = r21057803 <= r21057823;
        double r21057825 = r21057806 / r21057801;
        double r21057826 = r21057807 / r21057802;
        double r21057827 = r21057825 * r21057826;
        double r21057828 = r21057824 ? r21057817 : r21057827;
        double r21057829 = r21057819 ? r21057822 : r21057828;
        double r21057830 = r21057815 ? r21057817 : r21057829;
        double r21057831 = r21057805 ? r21057813 : r21057830;
        return r21057831;
}

\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\

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

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

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

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

\end{array}

Error

Bits error versus a1

Bits error versus a2

Bits error versus b1

Bits error versus b2

Target

Original11.4
Target10.8
Herbie5.4
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

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

    1. Initial program 13.2

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

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

      \[\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-frac8.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-identity8.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-frac6.1

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

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

    if -4.967958916173717e+118 < (* b1 b2) < -2.577332261011133e-120 or 2.1107718134298e-217 < (* b1 b2) < 7.378312823211572e+229

    1. Initial program 4.3

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

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

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

    if -2.577332261011133e-120 < (* b1 b2) < 2.1107718134298e-217

    1. Initial program 25.8

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

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt24.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-frac14.0

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

      \[\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-frac9.3

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

      \[\leadsto \color{blue}{\frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}} \cdot \frac{a1}{\frac{b2}{\sqrt[3]{a2}}}\]
    10. Using strategy rm
    11. Applied associate-*l/10.1

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

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

    if 7.378312823211572e+229 < (* b1 b2)

    1. Initial program 17.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -4.967958916173717 \cdot 10^{+118}:\\ \;\;\;\;\frac{a1}{\frac{b2}{\sqrt[3]{a2}}} \cdot \frac{\sqrt[3]{a2} \cdot \sqrt[3]{a2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -2.577332261011133 \cdot 10^{-120}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 2.1107718134298 \cdot 10^{-217}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b2}}{b1}\\ \mathbf{elif}\;b1 \cdot b2 \le 7.378312823211572 \cdot 10^{+229}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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