Average Error: 11.0 → 5.6
Time: 17.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.8434153992902853 \cdot 10^{+140}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.2487145692624138 \cdot 10^{-211}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.9749733958626933 \cdot 10^{-168}:\\ \;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \mathbf{elif}\;a1 \cdot a2 \le 8.48764460014293 \cdot 10^{+180}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.8434153992902853 \cdot 10^{+140}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 3.9749733958626933 \cdot 10^{-168}:\\
\;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5996429 = a1;
        double r5996430 = a2;
        double r5996431 = r5996429 * r5996430;
        double r5996432 = b1;
        double r5996433 = b2;
        double r5996434 = r5996432 * r5996433;
        double r5996435 = r5996431 / r5996434;
        return r5996435;
}

double f(double a1, double a2, double b1, double b2) {
        double r5996436 = a1;
        double r5996437 = a2;
        double r5996438 = r5996436 * r5996437;
        double r5996439 = -2.8434153992902853e+140;
        bool r5996440 = r5996438 <= r5996439;
        double r5996441 = b1;
        double r5996442 = r5996436 / r5996441;
        double r5996443 = r5996442 * r5996437;
        double r5996444 = 1.0;
        double r5996445 = b2;
        double r5996446 = r5996444 / r5996445;
        double r5996447 = r5996443 * r5996446;
        double r5996448 = -1.2487145692624138e-211;
        bool r5996449 = r5996438 <= r5996448;
        double r5996450 = r5996445 * r5996441;
        double r5996451 = r5996450 / r5996438;
        double r5996452 = r5996444 / r5996451;
        double r5996453 = 3.9749733958626933e-168;
        bool r5996454 = r5996438 <= r5996453;
        double r5996455 = cbrt(r5996437);
        double r5996456 = r5996455 * r5996455;
        double r5996457 = cbrt(r5996436);
        double r5996458 = r5996457 / r5996441;
        double r5996459 = r5996456 * r5996458;
        double r5996460 = r5996455 / r5996445;
        double r5996461 = r5996459 * r5996460;
        double r5996462 = r5996457 * r5996457;
        double r5996463 = r5996461 * r5996462;
        double r5996464 = 8.48764460014293e+180;
        bool r5996465 = r5996438 <= r5996464;
        double r5996466 = r5996465 ? r5996452 : r5996463;
        double r5996467 = r5996454 ? r5996463 : r5996466;
        double r5996468 = r5996449 ? r5996452 : r5996467;
        double r5996469 = r5996440 ? r5996447 : r5996468;
        return r5996469;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -2.8434153992902853e+140

    1. Initial program 25.5

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

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

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

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

    if -2.8434153992902853e+140 < (* a1 a2) < -1.2487145692624138e-211 or 3.9749733958626933e-168 < (* a1 a2) < 8.48764460014293e+180

    1. Initial program 3.6

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

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

    if -1.2487145692624138e-211 < (* a1 a2) < 3.9749733958626933e-168 or 8.48764460014293e+180 < (* a1 a2)

    1. Initial program 17.4

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

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

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

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

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

      \[\leadsto \color{blue}{\frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \left(\frac{\sqrt[3]{a1}}{b1} \cdot \frac{a2}{b2}\right)}\]
    9. Using strategy rm
    10. Applied *-un-lft-identity5.3

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

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

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

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

      \[\leadsto \frac{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}{1} \cdot \left(\color{blue}{\left(\frac{\sqrt[3]{a1}}{b1} \cdot \left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right)\right)} \cdot \frac{\sqrt[3]{a2}}{b2}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification5.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.8434153992902853 \cdot 10^{+140}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.2487145692624138 \cdot 10^{-211}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.9749733958626933 \cdot 10^{-168}:\\ \;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \mathbf{elif}\;a1 \cdot a2 \le 8.48764460014293 \cdot 10^{+180}:\\ \;\;\;\;\frac{1}{\frac{b2 \cdot b1}{a1 \cdot a2}}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\sqrt[3]{a2} \cdot \sqrt[3]{a2}\right) \cdot \frac{\sqrt[3]{a1}}{b1}\right) \cdot \frac{\sqrt[3]{a2}}{b2}\right) \cdot \left(\sqrt[3]{a1} \cdot \sqrt[3]{a1}\right)\\ \end{array}\]

Reproduce

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

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

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