Average Error: 10.8 → 5.0
Time: 12.4s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.1555799853760176 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.1084891218651217 \cdot 10^{-234}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.7118743416701524 \cdot 10^{+99}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 1.7118743416701524 \cdot 10^{+99}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r1320366 = a1;
        double r1320367 = a2;
        double r1320368 = r1320366 * r1320367;
        double r1320369 = b1;
        double r1320370 = b2;
        double r1320371 = r1320369 * r1320370;
        double r1320372 = r1320368 / r1320371;
        return r1320372;
}

double f(double a1, double a2, double b1, double b2) {
        double r1320373 = a1;
        double r1320374 = a2;
        double r1320375 = r1320373 * r1320374;
        double r1320376 = -3.975410788026315e+305;
        bool r1320377 = r1320375 <= r1320376;
        double r1320378 = b1;
        double r1320379 = r1320373 / r1320378;
        double r1320380 = b2;
        double r1320381 = cbrt(r1320380);
        double r1320382 = r1320381 * r1320381;
        double r1320383 = r1320379 / r1320382;
        double r1320384 = r1320374 / r1320381;
        double r1320385 = r1320383 * r1320384;
        double r1320386 = -5.1555799853760176e-213;
        bool r1320387 = r1320375 <= r1320386;
        double r1320388 = r1320380 * r1320378;
        double r1320389 = r1320375 / r1320388;
        double r1320390 = 1.1084891218651217e-234;
        bool r1320391 = r1320375 <= r1320390;
        double r1320392 = r1320374 / r1320378;
        double r1320393 = r1320392 / r1320380;
        double r1320394 = r1320373 * r1320393;
        double r1320395 = 1.7118743416701524e+99;
        bool r1320396 = r1320375 <= r1320395;
        double r1320397 = r1320396 ? r1320389 : r1320385;
        double r1320398 = r1320391 ? r1320394 : r1320397;
        double r1320399 = r1320387 ? r1320389 : r1320398;
        double r1320400 = r1320377 ? r1320385 : r1320399;
        return r1320400;
}

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

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -3.975410788026315e+305 or 1.7118743416701524e+99 < (* a1 a2)

    1. Initial program 29.9

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

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

      \[\leadsto \frac{a1}{b1} \cdot \frac{a2}{\color{blue}{\left(\sqrt[3]{b2} \cdot \sqrt[3]{b2}\right) \cdot \sqrt[3]{b2}}}\]
    6. Applied *-un-lft-identity11.5

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

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

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

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

    if -3.975410788026315e+305 < (* a1 a2) < -5.1555799853760176e-213 or 1.1084891218651217e-234 < (* a1 a2) < 1.7118743416701524e+99

    1. Initial program 4.0

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]

    if -5.1555799853760176e-213 < (* a1 a2) < 1.1084891218651217e-234

    1. Initial program 15.4

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.975410788026315 \cdot 10^{+305}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.1555799853760176 \cdot 10^{-213}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.1084891218651217 \cdot 10^{-234}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 1.7118743416701524 \cdot 10^{+99}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1}}{\sqrt[3]{b2} \cdot \sqrt[3]{b2}} \cdot \frac{a2}{\sqrt[3]{b2}}\\ \end{array}\]

Reproduce

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

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

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