Average Error: 11.2 → 4.9
Time: 19.6s
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 r5607885 = a1;
        double r5607886 = a2;
        double r5607887 = r5607885 * r5607886;
        double r5607888 = b1;
        double r5607889 = b2;
        double r5607890 = r5607888 * r5607889;
        double r5607891 = r5607887 / r5607890;
        return r5607891;
}

double f(double a1, double a2, double b1, double b2) {
        double r5607892 = a1;
        double r5607893 = a2;
        double r5607894 = r5607892 * r5607893;
        double r5607895 = -9.679895577717099e+235;
        bool r5607896 = r5607894 <= r5607895;
        double r5607897 = b1;
        double r5607898 = r5607892 / r5607897;
        double r5607899 = b2;
        double r5607900 = r5607893 / r5607899;
        double r5607901 = r5607898 * r5607900;
        double r5607902 = -8.528837923721859e-214;
        bool r5607903 = r5607894 <= r5607902;
        double r5607904 = r5607894 / r5607899;
        double r5607905 = r5607904 / r5607897;
        double r5607906 = 1.8721130835009063e-220;
        bool r5607907 = r5607894 <= r5607906;
        double r5607908 = r5607892 / r5607899;
        double r5607909 = r5607893 / r5607897;
        double r5607910 = r5607908 * r5607909;
        double r5607911 = 1.236371655594578e+224;
        bool r5607912 = r5607894 <= r5607911;
        double r5607913 = r5607894 / r5607897;
        double r5607914 = r5607913 / r5607899;
        double r5607915 = r5607897 / r5607900;
        double r5607916 = r5607892 / r5607915;
        double r5607917 = r5607912 ? r5607914 : r5607916;
        double r5607918 = r5607907 ? r5607910 : r5607917;
        double r5607919 = r5607903 ? r5607905 : r5607918;
        double r5607920 = r5607896 ? r5607901 : r5607919;
        return r5607920;
}

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 0 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 0 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 0 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 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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