Average Error: 11.2 → 4.9
Time: 20.3s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -9.679895577717099 \cdot 10^{+235}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -8.528837923721859 \cdot 10^{-214}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.8721130835009063 \cdot 10^{-220}:\\ \;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.236371655594578 \cdot 10^{+224}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -9.679895577717099 \cdot 10^{+235}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5313737 = a1;
        double r5313738 = a2;
        double r5313739 = r5313737 * r5313738;
        double r5313740 = b1;
        double r5313741 = b2;
        double r5313742 = r5313740 * r5313741;
        double r5313743 = r5313739 / r5313742;
        return r5313743;
}

double f(double a1, double a2, double b1, double b2) {
        double r5313744 = a1;
        double r5313745 = a2;
        double r5313746 = r5313744 * r5313745;
        double r5313747 = -9.679895577717099e+235;
        bool r5313748 = r5313746 <= r5313747;
        double r5313749 = b1;
        double r5313750 = r5313744 / r5313749;
        double r5313751 = b2;
        double r5313752 = r5313745 / r5313751;
        double r5313753 = r5313750 * r5313752;
        double r5313754 = -8.528837923721859e-214;
        bool r5313755 = r5313746 <= r5313754;
        double r5313756 = r5313746 / r5313751;
        double r5313757 = r5313756 / r5313749;
        double r5313758 = 1.8721130835009063e-220;
        bool r5313759 = r5313746 <= r5313758;
        double r5313760 = r5313744 / r5313751;
        double r5313761 = r5313745 / r5313749;
        double r5313762 = r5313760 * r5313761;
        double r5313763 = 1.236371655594578e+224;
        bool r5313764 = r5313746 <= r5313763;
        double r5313765 = r5313746 / r5313749;
        double r5313766 = r5313765 / r5313751;
        double r5313767 = r5313749 / r5313752;
        double r5313768 = r5313744 / r5313767;
        double r5313769 = r5313764 ? r5313766 : r5313768;
        double r5313770 = r5313759 ? r5313762 : r5313769;
        double r5313771 = r5313755 ? r5313757 : r5313770;
        double r5313772 = r5313748 ? r5313753 : r5313771;
        return r5313772;
}

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

Derivation

  1. Split input into 5 regimes
  2. if (* a1 a2) < -9.679895577717099e+235

    1. Initial program 42.4

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

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

    if -9.679895577717099e+235 < (* a1 a2) < -8.528837923721859e-214

    1. Initial program 4.7

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Taylor expanded around -inf 4.7

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

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

    if -8.528837923721859e-214 < (* a1 a2) < 1.8721130835009063e-220

    1. Initial program 15.7

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Taylor expanded around -inf 15.7

      \[\leadsto \color{blue}{\frac{a1 \cdot a2}{b2 \cdot b1}}\]
    3. Using strategy rm
    4. Applied times-frac3.8

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

    if 1.8721130835009063e-220 < (* a1 a2) < 1.236371655594578e+224

    1. Initial program 4.4

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

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

    if 1.236371655594578e+224 < (* a1 a2)

    1. Initial program 40.0

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Taylor expanded around -inf 40.0

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{\color{blue}{1 \cdot b2}}}{b1}\]
    7. Applied times-frac18.5

      \[\leadsto \frac{\color{blue}{\frac{a1}{1} \cdot \frac{a2}{b2}}}{b1}\]
    8. Applied associate-/l*10.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -9.679895577717099 \cdot 10^{+235}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -8.528837923721859 \cdot 10^{-214}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.8721130835009063 \cdot 10^{-220}:\\ \;\;\;\;\frac{a1}{b2} \cdot \frac{a2}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.236371655594578 \cdot 10^{+224}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\ \end{array}\]

Reproduce

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

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

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