Average Error: 11.6 → 2.7
Time: 12.8s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -9.782499787656681574696062098790783172828 \cdot 10^{-322}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.421277284710987870204738960879832034274 \cdot 10^{-315}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.286175403506427577716209346328092058444 \cdot 10^{301}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r76639 = a1;
        double r76640 = a2;
        double r76641 = r76639 * r76640;
        double r76642 = b1;
        double r76643 = b2;
        double r76644 = r76642 * r76643;
        double r76645 = r76641 / r76644;
        return r76645;
}

double f(double a1, double a2, double b1, double b2) {
        double r76646 = a1;
        double r76647 = a2;
        double r76648 = r76646 * r76647;
        double r76649 = b1;
        double r76650 = b2;
        double r76651 = r76649 * r76650;
        double r76652 = r76648 / r76651;
        double r76653 = -inf.0;
        bool r76654 = r76652 <= r76653;
        double r76655 = r76646 / r76649;
        double r76656 = r76647 / r76650;
        double r76657 = r76655 * r76656;
        double r76658 = -9.7824997876567e-322;
        bool r76659 = r76652 <= r76658;
        double r76660 = 1.421277284711e-315;
        bool r76661 = r76652 <= r76660;
        double r76662 = r76646 / r76650;
        double r76663 = r76662 / r76649;
        double r76664 = r76663 * r76647;
        double r76665 = 2.2861754035064276e+301;
        bool r76666 = r76652 <= r76665;
        double r76667 = r76666 ? r76652 : r76657;
        double r76668 = r76661 ? r76664 : r76667;
        double r76669 = r76659 ? r76652 : r76668;
        double r76670 = r76654 ? r76657 : r76669;
        return r76670;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -inf.0 or 2.2861754035064276e+301 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 62.7

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -9.7824997876567e-322 or 1.421277284711e-315 < (/ (* a1 a2) (* b1 b2)) < 2.2861754035064276e+301

    1. Initial program 0.9

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

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

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

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

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

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

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

      \[\leadsto \frac{1}{b1} \cdot \color{blue}{\left(\frac{a1}{b2} \cdot a2\right)}\]
    11. Using strategy rm
    12. Applied *-un-lft-identity14.5

      \[\leadsto \frac{1}{\color{blue}{1 \cdot b1}} \cdot \left(\frac{a1}{b2} \cdot a2\right)\]
    13. Applied add-cube-cbrt14.5

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

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

      \[\leadsto \color{blue}{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{1} \cdot \left(\frac{\sqrt[3]{1}}{b1} \cdot \left(\frac{a1}{b2} \cdot a2\right)\right)}\]
    16. Simplified0.9

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

    if -9.7824997876567e-322 < (/ (* a1 a2) (* b1 b2)) < 1.421277284711e-315

    1. Initial program 13.6

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -9.782499787656681574696062098790783172828 \cdot 10^{-322}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 1.421277284710987870204738960879832034274 \cdot 10^{-315}:\\ \;\;\;\;\frac{\frac{a1}{b2}}{b1} \cdot a2\\ \mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 2.286175403506427577716209346328092058444 \cdot 10^{301}:\\ \;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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