Average Error: 11.4 → 6.0
Time: 7.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -7.352417922295524642864555630196818267831 \cdot 10^{161}:\\ \;\;\;\;\frac{a1}{b2 \cdot \frac{b1}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.829997385631305936289034491170991223182 \cdot 10^{-269}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.482196937523739632529706378604664117095 \cdot 10^{-323}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.821164334411188487502242748022045100884 \cdot 10^{272}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -7.352417922295524642864555630196818267831 \cdot 10^{161}:\\
\;\;\;\;\frac{a1}{b2 \cdot \frac{b1}{a2}}\\

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

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

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

\mathbf{else}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r138902 = a1;
        double r138903 = a2;
        double r138904 = r138902 * r138903;
        double r138905 = b1;
        double r138906 = b2;
        double r138907 = r138905 * r138906;
        double r138908 = r138904 / r138907;
        return r138908;
}

double f(double a1, double a2, double b1, double b2) {
        double r138909 = a1;
        double r138910 = a2;
        double r138911 = r138909 * r138910;
        double r138912 = -7.352417922295525e+161;
        bool r138913 = r138911 <= r138912;
        double r138914 = b2;
        double r138915 = b1;
        double r138916 = r138915 / r138910;
        double r138917 = r138914 * r138916;
        double r138918 = r138909 / r138917;
        double r138919 = -2.829997385631306e-269;
        bool r138920 = r138911 <= r138919;
        double r138921 = r138911 / r138915;
        double r138922 = r138921 / r138914;
        double r138923 = 1.4821969375237e-323;
        bool r138924 = r138911 <= r138923;
        double r138925 = r138910 / r138915;
        double r138926 = r138925 / r138914;
        double r138927 = r138909 * r138926;
        double r138928 = 1.8211643344111885e+272;
        bool r138929 = r138911 <= r138928;
        double r138930 = 1.0;
        double r138931 = r138930 / r138915;
        double r138932 = r138931 / r138914;
        double r138933 = r138911 * r138932;
        double r138934 = r138909 / r138915;
        double r138935 = r138934 * r138910;
        double r138936 = r138930 / r138914;
        double r138937 = r138935 * r138936;
        double r138938 = r138929 ? r138933 : r138937;
        double r138939 = r138924 ? r138927 : r138938;
        double r138940 = r138920 ? r138922 : r138939;
        double r138941 = r138913 ? r138918 : r138940;
        return r138941;
}

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

Derivation

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

    1. Initial program 28.1

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

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

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

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

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

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

    if -7.352417922295525e+161 < (* a1 a2) < -2.829997385631306e-269

    1. Initial program 4.9

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

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

    if -2.829997385631306e-269 < (* a1 a2) < 1.4821969375237e-323

    1. Initial program 19.2

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied *-un-lft-identity19.5

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

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

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

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

    if 1.4821969375237e-323 < (* a1 a2) < 1.8211643344111885e+272

    1. Initial program 5.7

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied div-inv5.6

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

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

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

    if 1.8211643344111885e+272 < (* a1 a2)

    1. Initial program 50.7

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

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

      \[\leadsto \frac{a1}{b1} \cdot \color{blue}{\left(a2 \cdot \frac{1}{b2}\right)}\]
    6. Applied associate-*r*20.1

      \[\leadsto \color{blue}{\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}}\]
  3. Recombined 5 regimes into one program.
  4. Final simplification6.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -7.352417922295524642864555630196818267831 \cdot 10^{161}:\\ \;\;\;\;\frac{a1}{b2 \cdot \frac{b1}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.829997385631305936289034491170991223182 \cdot 10^{-269}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.482196937523739632529706378604664117095 \cdot 10^{-323}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.821164334411188487502242748022045100884 \cdot 10^{272}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \end{array}\]

Reproduce

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

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

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