Average Error: 11.3 → 6.3
Time: 10.4s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.823909045212994652646830133015028059674 \cdot 10^{247}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.977094403295562009633117616926065832914 \cdot 10^{-180}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 8.073858979281978655111868248140178022066 \cdot 10^{-164}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(\frac{a1}{b2} \cdot a2\right)\\ \mathbf{elif}\;b1 \cdot b2 \le 2.345913877288735097014094340963252524817 \cdot 10^{180}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{b2} \cdot a2\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.823909045212994652646830133015028059674 \cdot 10^{247}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\

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

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

\mathbf{elif}\;b1 \cdot b2 \le 2.345913877288735097014094340963252524817 \cdot 10^{180}:\\
\;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r4844624 = a1;
        double r4844625 = a2;
        double r4844626 = r4844624 * r4844625;
        double r4844627 = b1;
        double r4844628 = b2;
        double r4844629 = r4844627 * r4844628;
        double r4844630 = r4844626 / r4844629;
        return r4844630;
}

double f(double a1, double a2, double b1, double b2) {
        double r4844631 = b1;
        double r4844632 = b2;
        double r4844633 = r4844631 * r4844632;
        double r4844634 = -2.8239090452129947e+247;
        bool r4844635 = r4844633 <= r4844634;
        double r4844636 = a1;
        double r4844637 = a2;
        double r4844638 = r4844632 / r4844637;
        double r4844639 = r4844638 * r4844631;
        double r4844640 = r4844636 / r4844639;
        double r4844641 = -1.977094403295562e-180;
        bool r4844642 = r4844633 <= r4844641;
        double r4844643 = r4844636 / r4844633;
        double r4844644 = r4844643 * r4844637;
        double r4844645 = 8.073858979281979e-164;
        bool r4844646 = r4844633 <= r4844645;
        double r4844647 = 1.0;
        double r4844648 = r4844647 / r4844631;
        double r4844649 = r4844636 / r4844632;
        double r4844650 = r4844649 * r4844637;
        double r4844651 = r4844648 * r4844650;
        double r4844652 = 2.345913877288735e+180;
        bool r4844653 = r4844633 <= r4844652;
        double r4844654 = r4844637 / r4844633;
        double r4844655 = r4844647 / r4844654;
        double r4844656 = r4844636 / r4844655;
        double r4844657 = r4844636 / r4844631;
        double r4844658 = r4844657 / r4844632;
        double r4844659 = r4844658 * r4844637;
        double r4844660 = r4844653 ? r4844656 : r4844659;
        double r4844661 = r4844646 ? r4844651 : r4844660;
        double r4844662 = r4844642 ? r4844644 : r4844661;
        double r4844663 = r4844635 ? r4844640 : r4844662;
        return r4844663;
}

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

Derivation

  1. Split input into 5 regimes
  2. if (* b1 b2) < -2.8239090452129947e+247

    1. Initial program 17.4

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

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

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

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

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

    if -2.8239090452129947e+247 < (* b1 b2) < -1.977094403295562e-180

    1. Initial program 5.1

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

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

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

    if -1.977094403295562e-180 < (* b1 b2) < 8.073858979281979e-164

    1. Initial program 28.1

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

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

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

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

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

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

    if 8.073858979281979e-164 < (* b1 b2) < 2.345913877288735e+180

    1. Initial program 4.3

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

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

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

    if 2.345913877288735e+180 < (* b1 b2)

    1. Initial program 13.7

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

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.823909045212994652646830133015028059674 \cdot 10^{247}:\\ \;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\ \mathbf{elif}\;b1 \cdot b2 \le -1.977094403295562009633117616926065832914 \cdot 10^{-180}:\\ \;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\ \mathbf{elif}\;b1 \cdot b2 \le 8.073858979281978655111868248140178022066 \cdot 10^{-164}:\\ \;\;\;\;\frac{1}{b1} \cdot \left(\frac{a1}{b2} \cdot a2\right)\\ \mathbf{elif}\;b1 \cdot b2 \le 2.345913877288735097014094340963252524817 \cdot 10^{180}:\\ \;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{b2} \cdot a2\\ \end{array}\]

Reproduce

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

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

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