Average Error: 11.1 → 11.0
Time: 24.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \le -7.561022864069795 \cdot 10^{+200}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;a1 \le -3.981707805125607 \cdot 10^{-149}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \mathbf{elif}\;a1 \le -6.112442409088481 \cdot 10^{-246}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{elif}\;a1 \le 1.0068818146049866 \cdot 10^{-272}:\\ \;\;\;\;\frac{\frac{a2 \cdot a1}{b1}}{b2}\\ \mathbf{elif}\;a1 \le 1.5797091395129618 \cdot 10^{-129}:\\ \;\;\;\;\frac{\frac{a2}{b1}}{b2} \cdot a1\\ \mathbf{elif}\;a1 \le 9.94244733053713 \cdot 10^{-64}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{elif}\;a1 \le 1.1607821255854974 \cdot 10^{+39}:\\ \;\;\;\;\frac{\frac{a2 \cdot a1}{b1}}{b2}\\ \mathbf{elif}\;a1 \le 6.918690886706279 \cdot 10^{+198}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \le -7.561022864069795 \cdot 10^{+200}:\\
\;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\

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

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

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

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

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6173642 = a1;
        double r6173643 = a2;
        double r6173644 = r6173642 * r6173643;
        double r6173645 = b1;
        double r6173646 = b2;
        double r6173647 = r6173645 * r6173646;
        double r6173648 = r6173644 / r6173647;
        return r6173648;
}

double f(double a1, double a2, double b1, double b2) {
        double r6173649 = a1;
        double r6173650 = -7.561022864069795e+200;
        bool r6173651 = r6173649 <= r6173650;
        double r6173652 = a2;
        double r6173653 = b2;
        double r6173654 = r6173652 / r6173653;
        double r6173655 = b1;
        double r6173656 = r6173649 / r6173655;
        double r6173657 = r6173654 * r6173656;
        double r6173658 = -3.981707805125607e-149;
        bool r6173659 = r6173649 <= r6173658;
        double r6173660 = r6173655 / r6173652;
        double r6173661 = r6173649 / r6173660;
        double r6173662 = r6173661 / r6173653;
        double r6173663 = -6.112442409088481e-246;
        bool r6173664 = r6173649 <= r6173663;
        double r6173665 = 1.0;
        double r6173666 = r6173665 / r6173655;
        double r6173667 = r6173649 / r6173653;
        double r6173668 = r6173652 * r6173667;
        double r6173669 = r6173666 * r6173668;
        double r6173670 = 1.0068818146049866e-272;
        bool r6173671 = r6173649 <= r6173670;
        double r6173672 = r6173652 * r6173649;
        double r6173673 = r6173672 / r6173655;
        double r6173674 = r6173673 / r6173653;
        double r6173675 = 1.5797091395129618e-129;
        bool r6173676 = r6173649 <= r6173675;
        double r6173677 = r6173652 / r6173655;
        double r6173678 = r6173677 / r6173653;
        double r6173679 = r6173678 * r6173649;
        double r6173680 = 9.94244733053713e-64;
        bool r6173681 = r6173649 <= r6173680;
        double r6173682 = 1.1607821255854974e+39;
        bool r6173683 = r6173649 <= r6173682;
        double r6173684 = 6.918690886706279e+198;
        bool r6173685 = r6173649 <= r6173684;
        double r6173686 = r6173655 * r6173653;
        double r6173687 = r6173686 / r6173652;
        double r6173688 = r6173649 / r6173687;
        double r6173689 = r6173685 ? r6173669 : r6173688;
        double r6173690 = r6173683 ? r6173674 : r6173689;
        double r6173691 = r6173681 ? r6173669 : r6173690;
        double r6173692 = r6173676 ? r6173679 : r6173691;
        double r6173693 = r6173671 ? r6173674 : r6173692;
        double r6173694 = r6173664 ? r6173669 : r6173693;
        double r6173695 = r6173659 ? r6173662 : r6173694;
        double r6173696 = r6173651 ? r6173657 : r6173695;
        return r6173696;
}

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

Derivation

  1. Split input into 6 regimes
  2. if a1 < -7.561022864069795e+200

    1. Initial program 17.9

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

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

    if -7.561022864069795e+200 < a1 < -3.981707805125607e-149

    1. Initial program 9.6

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

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

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

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

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

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

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

    if -3.981707805125607e-149 < a1 < -6.112442409088481e-246 or 1.5797091395129618e-129 < a1 < 9.94244733053713e-64 or 1.1607821255854974e+39 < a1 < 6.918690886706279e+198

    1. Initial program 10.4

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

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

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

      \[\leadsto \frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{\color{blue}{1 \cdot b2}}\]
    8. Applied div-inv11.3

      \[\leadsto \frac{\frac{1}{\color{blue}{b1 \cdot \frac{1}{a1 \cdot a2}}}}{1 \cdot b2}\]
    9. Applied add-cube-cbrt11.3

      \[\leadsto \frac{\frac{\color{blue}{\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}}}{b1 \cdot \frac{1}{a1 \cdot a2}}}{1 \cdot b2}\]
    10. Applied times-frac11.1

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{b1}}{1} \cdot \frac{\frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}{b2}}\]
    12. Simplified10.6

      \[\leadsto \color{blue}{\frac{1}{b1}} \cdot \frac{\frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}{b2}\]
    13. Simplified10.9

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

    if -6.112442409088481e-246 < a1 < 1.0068818146049866e-272 or 9.94244733053713e-64 < a1 < 1.1607821255854974e+39

    1. Initial program 9.5

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Taylor expanded around -inf 9.2

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

    if 1.0068818146049866e-272 < a1 < 1.5797091395129618e-129

    1. Initial program 10.4

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

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

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

      \[\leadsto \frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{\color{blue}{1 \cdot b2}}\]
    8. Applied *-un-lft-identity10.4

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

      \[\leadsto \frac{\frac{1}{\color{blue}{\frac{1}{a1} \cdot \frac{b1}{a2}}}}{1 \cdot b2}\]
    10. Applied *-un-lft-identity10.8

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

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

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

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

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

    if 6.918690886706279e+198 < a1

    1. Initial program 19.5

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \le -7.561022864069795 \cdot 10^{+200}:\\ \;\;\;\;\frac{a2}{b2} \cdot \frac{a1}{b1}\\ \mathbf{elif}\;a1 \le -3.981707805125607 \cdot 10^{-149}:\\ \;\;\;\;\frac{\frac{a1}{\frac{b1}{a2}}}{b2}\\ \mathbf{elif}\;a1 \le -6.112442409088481 \cdot 10^{-246}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{elif}\;a1 \le 1.0068818146049866 \cdot 10^{-272}:\\ \;\;\;\;\frac{\frac{a2 \cdot a1}{b1}}{b2}\\ \mathbf{elif}\;a1 \le 1.5797091395129618 \cdot 10^{-129}:\\ \;\;\;\;\frac{\frac{a2}{b1}}{b2} \cdot a1\\ \mathbf{elif}\;a1 \le 9.94244733053713 \cdot 10^{-64}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{elif}\;a1 \le 1.1607821255854974 \cdot 10^{+39}:\\ \;\;\;\;\frac{\frac{a2 \cdot a1}{b1}}{b2}\\ \mathbf{elif}\;a1 \le 6.918690886706279 \cdot 10^{+198}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(a2 \cdot \frac{a1}{b2}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \end{array}\]

Reproduce

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

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

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