Average Error: 10.6 → 3.9
Time: 1.2m
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.166761891516301 \cdot 10^{+211}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.9012909414021198 \cdot 10^{-246}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.0454448799638273 \cdot 10^{-197}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.068274320797992 \cdot 10^{+202}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.166761891516301 \cdot 10^{+211}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 4.068274320797992 \cdot 10^{+202}:\\
\;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r24582463 = a1;
        double r24582464 = a2;
        double r24582465 = r24582463 * r24582464;
        double r24582466 = b1;
        double r24582467 = b2;
        double r24582468 = r24582466 * r24582467;
        double r24582469 = r24582465 / r24582468;
        return r24582469;
}

double f(double a1, double a2, double b1, double b2) {
        double r24582470 = a1;
        double r24582471 = a2;
        double r24582472 = r24582470 * r24582471;
        double r24582473 = -8.166761891516301e+211;
        bool r24582474 = r24582472 <= r24582473;
        double r24582475 = b1;
        double r24582476 = r24582471 / r24582475;
        double r24582477 = b2;
        double r24582478 = r24582476 / r24582477;
        double r24582479 = r24582470 * r24582478;
        double r24582480 = -1.9012909414021198e-246;
        bool r24582481 = r24582472 <= r24582480;
        double r24582482 = cbrt(r24582477);
        double r24582483 = r24582482 * r24582482;
        double r24582484 = r24582472 / r24582483;
        double r24582485 = 1.0;
        double r24582486 = r24582485 / r24582475;
        double r24582487 = r24582486 / r24582482;
        double r24582488 = r24582484 * r24582487;
        double r24582489 = 2.0454448799638273e-197;
        bool r24582490 = r24582472 <= r24582489;
        double r24582491 = 4.068274320797992e+202;
        bool r24582492 = r24582472 <= r24582491;
        double r24582493 = r24582492 ? r24582488 : r24582479;
        double r24582494 = r24582490 ? r24582479 : r24582493;
        double r24582495 = r24582481 ? r24582488 : r24582494;
        double r24582496 = r24582474 ? r24582479 : r24582495;
        return r24582496;
}

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

Original10.6
Target10.6
Herbie3.9
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 2 regimes
  2. if (* a1 a2) < -8.166761891516301e+211 or -1.9012909414021198e-246 < (* a1 a2) < 2.0454448799638273e-197 or 4.068274320797992e+202 < (* a1 a2)

    1. Initial program 20.7

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

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

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

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

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

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

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

    if -8.166761891516301e+211 < (* a1 a2) < -1.9012909414021198e-246 or 2.0454448799638273e-197 < (* a1 a2) < 4.068274320797992e+202

    1. Initial program 4.6

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

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

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

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

      \[\leadsto \color{blue}{\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.166761891516301 \cdot 10^{+211}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.9012909414021198 \cdot 10^{-246}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.0454448799638273 \cdot 10^{-197}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.068274320797992 \cdot 10^{+202}:\\ \;\;\;\;\frac{a1 \cdot a2}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{\frac{1}{b1}}{\sqrt[3]{b2}}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \end{array}\]

Reproduce

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

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

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