Average Error: 11.1 → 5.6
Time: 50.7s
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 r20680414 = a1;
        double r20680415 = a2;
        double r20680416 = r20680414 * r20680415;
        double r20680417 = b1;
        double r20680418 = b2;
        double r20680419 = r20680417 * r20680418;
        double r20680420 = r20680416 / r20680419;
        return r20680420;
}

double f(double a1, double a2, double b1, double b2) {
        double r20680421 = b1;
        double r20680422 = b2;
        double r20680423 = r20680421 * r20680422;
        double r20680424 = -9.384563571355019e+255;
        bool r20680425 = r20680423 <= r20680424;
        double r20680426 = a1;
        double r20680427 = r20680426 / r20680421;
        double r20680428 = a2;
        double r20680429 = r20680428 / r20680422;
        double r20680430 = r20680427 * r20680429;
        double r20680431 = -1.0490423713698057e-109;
        bool r20680432 = r20680423 <= r20680431;
        double r20680433 = r20680423 / r20680428;
        double r20680434 = r20680426 / r20680433;
        double r20680435 = 5.934410328828728e-246;
        bool r20680436 = r20680423 <= r20680435;
        double r20680437 = r20680428 * r20680427;
        double r20680438 = r20680437 / r20680422;
        double r20680439 = 2.6156936580694473e+78;
        bool r20680440 = r20680423 <= r20680439;
        double r20680441 = r20680421 / r20680428;
        double r20680442 = r20680426 / r20680441;
        double r20680443 = r20680442 / r20680422;
        double r20680444 = r20680440 ? r20680434 : r20680443;
        double r20680445 = r20680436 ? r20680438 : r20680444;
        double r20680446 = r20680432 ? r20680434 : r20680445;
        double r20680447 = r20680425 ? r20680430 : r20680446;
        return r20680447;
}

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

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

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