Average Error: 11.1 → 5.6
Time: 53.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -9.384563571355019 \cdot 10^{+255}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.0490423713698057 \cdot 10^{-109}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.934410328828728 \cdot 10^{-246}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b1}}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.6156936580694473 \cdot 10^{+78}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.384563571355019 \cdot 10^{+255}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r32326861 = a1;
        double r32326862 = a2;
        double r32326863 = r32326861 * r32326862;
        double r32326864 = b1;
        double r32326865 = b2;
        double r32326866 = r32326864 * r32326865;
        double r32326867 = r32326863 / r32326866;
        return r32326867;
}

double f(double a1, double a2, double b1, double b2) {
        double r32326868 = b1;
        double r32326869 = b2;
        double r32326870 = r32326868 * r32326869;
        double r32326871 = -9.384563571355019e+255;
        bool r32326872 = r32326870 <= r32326871;
        double r32326873 = a1;
        double r32326874 = r32326873 / r32326868;
        double r32326875 = a2;
        double r32326876 = r32326875 / r32326869;
        double r32326877 = r32326874 * r32326876;
        double r32326878 = -1.0490423713698057e-109;
        bool r32326879 = r32326870 <= r32326878;
        double r32326880 = r32326870 / r32326875;
        double r32326881 = r32326873 / r32326880;
        double r32326882 = 5.934410328828728e-246;
        bool r32326883 = r32326870 <= r32326882;
        double r32326884 = r32326875 * r32326874;
        double r32326885 = r32326884 / r32326869;
        double r32326886 = 2.6156936580694473e+78;
        bool r32326887 = r32326870 <= r32326886;
        double r32326888 = r32326868 / r32326875;
        double r32326889 = r32326873 / r32326888;
        double r32326890 = r32326889 / r32326869;
        double r32326891 = r32326887 ? r32326881 : r32326890;
        double r32326892 = r32326883 ? r32326885 : r32326891;
        double r32326893 = r32326879 ? r32326881 : r32326892;
        double r32326894 = r32326872 ? r32326877 : r32326893;
        return r32326894;
}

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

Derivation

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

    1. Initial program 17.9

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{\frac{b1}{a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity3.7

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

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

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

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

    if -9.384563571355019e+255 < (* b1 b2) < -1.0490423713698057e-109 or 5.934410328828728e-246 < (* b1 b2) < 2.6156936580694473e+78

    1. Initial program 4.8

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

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

    if -1.0490423713698057e-109 < (* b1 b2) < 5.934410328828728e-246

    1. Initial program 25.8

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

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

      \[\leadsto \frac{\color{blue}{\frac{a1}{\frac{b1}{a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied associate-/r/9.8

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

    if 2.6156936580694473e+78 < (* b1 b2)

    1. Initial program 11.4

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -9.384563571355019 \cdot 10^{+255}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.0490423713698057 \cdot 10^{-109}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;b1 \cdot b2 \le 5.934410328828728 \cdot 10^{-246}:\\ \;\;\;\;\frac{a2 \cdot \frac{a1}{b1}}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le 2.6156936580694473 \cdot 10^{+78}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \end{array}\]

Reproduce

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

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

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