Average Error: 10.8 → 3.4
Time: 7.0s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.663951266392983259496348057307607123121 \cdot 10^{282}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.745840766876309597615430800374467180096 \cdot 10^{-301}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.167900665754173440172046964395978388419 \cdot 10^{241}:\\ \;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.663951266392983259496348057307607123121 \cdot 10^{282}:\\
\;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\

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

\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r79535 = a1;
        double r79536 = a2;
        double r79537 = r79535 * r79536;
        double r79538 = b1;
        double r79539 = b2;
        double r79540 = r79538 * r79539;
        double r79541 = r79537 / r79540;
        return r79541;
}

double f(double a1, double a2, double b1, double b2) {
        double r79542 = a1;
        double r79543 = a2;
        double r79544 = r79542 * r79543;
        double r79545 = b1;
        double r79546 = b2;
        double r79547 = r79545 * r79546;
        double r79548 = r79544 / r79547;
        double r79549 = -5.663951266392983e+282;
        bool r79550 = r79548 <= r79549;
        double r79551 = r79542 / r79546;
        double r79552 = r79551 / r79545;
        double r79553 = r79552 * r79543;
        double r79554 = -1.7458407668763096e-301;
        bool r79555 = r79548 <= r79554;
        double r79556 = -0.0;
        bool r79557 = r79548 <= r79556;
        double r79558 = r79542 / r79545;
        double r79559 = r79543 / r79546;
        double r79560 = r79558 * r79559;
        double r79561 = 1.1679006657541734e+241;
        bool r79562 = r79548 <= r79561;
        double r79563 = 1.0;
        double r79564 = r79563 / r79547;
        double r79565 = r79564 * r79544;
        double r79566 = r79546 / r79543;
        double r79567 = r79545 * r79566;
        double r79568 = r79542 / r79567;
        double r79569 = r79562 ? r79565 : r79568;
        double r79570 = r79557 ? r79560 : r79569;
        double r79571 = r79555 ? r79548 : r79570;
        double r79572 = r79550 ? r79553 : r79571;
        return r79572;
}

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

Original10.8
Target10.9
Herbie3.4
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 5 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -5.663951266392983e+282

    1. Initial program 49.5

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

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

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

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

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

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

      \[\leadsto \color{blue}{\frac{1}{b1}} \cdot \frac{a1}{\frac{b2}{a2}}\]
    10. Using strategy rm
    11. Applied associate-/r/19.1

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

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

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

    if -5.663951266392983e+282 < (/ (* a1 a2) (* b1 b2)) < -1.7458407668763096e-301

    1. Initial program 1.0

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Applied *-un-lft-identity13.0

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

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

      \[\leadsto \color{blue}{\frac{1}{b1}} \cdot \frac{a1}{\frac{b2}{a2}}\]
    10. Taylor expanded around 0 1.0

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

    if -1.7458407668763096e-301 < (/ (* a1 a2) (* b1 b2)) < -0.0

    1. Initial program 12.6

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

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

    if -0.0 < (/ (* a1 a2) (* b1 b2)) < 1.1679006657541734e+241

    1. Initial program 4.8

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

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

      \[\leadsto \frac{a1}{\color{blue}{\left(b1 \cdot b2\right) \cdot \frac{1}{a2}}}\]
    6. Applied *-un-lft-identity6.5

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

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

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

    if 1.1679006657541734e+241 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 48.4

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

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

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

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Simplified14.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -5.663951266392983259496348057307607123121 \cdot 10^{282}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -1.745840766876309597615430800374467180096 \cdot 10^{-301}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.167900665754173440172046964395978388419 \cdot 10^{241}:\\ \;\;\;\;\frac{1}{b1 \cdot b2} \cdot \left(a1 \cdot a2\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\ \end{array}\]

Reproduce

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

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

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