Average Error: 11.4 → 5.0
Time: 6.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.94889360893563438071998752474482145298 \cdot 10^{196}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.218601469831208276173547548571215326996 \cdot 10^{-177}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.026121071344955568278533610414416564485 \cdot 10^{-270}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.895199432649532243061505251331231991353 \cdot 10^{155}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -1.94889360893563438071998752474482145298 \cdot 10^{196}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

\mathbf{elif}\;a1 \cdot a2 \le -2.218601469831208276173547548571215326996 \cdot 10^{-177}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\

\mathbf{elif}\;a1 \cdot a2 \le 5.026121071344955568278533610414416564485 \cdot 10^{-270}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\

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

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r138628 = a1;
        double r138629 = a2;
        double r138630 = r138628 * r138629;
        double r138631 = b1;
        double r138632 = b2;
        double r138633 = r138631 * r138632;
        double r138634 = r138630 / r138633;
        return r138634;
}

double f(double a1, double a2, double b1, double b2) {
        double r138635 = a1;
        double r138636 = a2;
        double r138637 = r138635 * r138636;
        double r138638 = -1.9488936089356344e+196;
        bool r138639 = r138637 <= r138638;
        double r138640 = b1;
        double r138641 = r138635 / r138640;
        double r138642 = b2;
        double r138643 = r138636 / r138642;
        double r138644 = r138641 * r138643;
        double r138645 = -2.2186014698312083e-177;
        bool r138646 = r138637 <= r138645;
        double r138647 = 1.0;
        double r138648 = r138640 * r138642;
        double r138649 = r138648 / r138637;
        double r138650 = r138647 / r138649;
        double r138651 = 5.0261210713449556e-270;
        bool r138652 = r138637 <= r138651;
        double r138653 = cbrt(r138635);
        double r138654 = cbrt(r138642);
        double r138655 = r138654 * r138654;
        double r138656 = r138655 / r138653;
        double r138657 = r138653 / r138656;
        double r138658 = r138657 / r138640;
        double r138659 = r138654 / r138636;
        double r138660 = r138653 / r138659;
        double r138661 = r138658 * r138660;
        double r138662 = 6.895199432649532e+155;
        bool r138663 = r138637 <= r138662;
        double r138664 = r138637 / r138640;
        double r138665 = r138664 / r138642;
        double r138666 = r138663 ? r138665 : r138661;
        double r138667 = r138652 ? r138661 : r138666;
        double r138668 = r138646 ? r138650 : r138667;
        double r138669 = r138639 ? r138644 : r138668;
        return r138669;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (* a1 a2) < -1.9488936089356344e+196

    1. Initial program 34.8

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

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

    if -1.9488936089356344e+196 < (* a1 a2) < -2.2186014698312083e-177

    1. Initial program 4.8

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

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

    if -2.2186014698312083e-177 < (* a1 a2) < 5.0261210713449556e-270 or 6.895199432649532e+155 < (* a1 a2)

    1. Initial program 18.8

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

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

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

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

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

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

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

      \[\leadsto \frac{1}{b1} \cdot \frac{a1}{\frac{b2}{\color{blue}{1 \cdot a2}}}\]
    12. Applied add-cube-cbrt10.4

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

      \[\leadsto \frac{1}{b1} \cdot \frac{a1}{\color{blue}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{1} \cdot \frac{\sqrt[3]{b2}}{a2}}}\]
    14. Applied add-cube-cbrt10.5

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

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

      \[\leadsto \color{blue}{\left(\frac{1}{b1} \cdot \frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{1}}\right) \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}}\]
    17. Simplified5.0

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

    if 5.0261210713449556e-270 < (* a1 a2) < 6.895199432649532e+155

    1. Initial program 4.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -1.94889360893563438071998752474482145298 \cdot 10^{196}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.218601469831208276173547548571215326996 \cdot 10^{-177}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 5.026121071344955568278533610414416564485 \cdot 10^{-270}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.895199432649532243061505251331231991353 \cdot 10^{155}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2} \cdot \sqrt[3]{b2}}{\sqrt[3]{a1}}}}{b1} \cdot \frac{\sqrt[3]{a1}}{\frac{\sqrt[3]{b2}}{a2}}\\ \end{array}\]

Reproduce

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

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

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