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 r24558277 = a1;
        double r24558278 = a2;
        double r24558279 = r24558277 * r24558278;
        double r24558280 = b1;
        double r24558281 = b2;
        double r24558282 = r24558280 * r24558281;
        double r24558283 = r24558279 / r24558282;
        return r24558283;
}

double f(double a1, double a2, double b1, double b2) {
        double r24558284 = a1;
        double r24558285 = a2;
        double r24558286 = r24558284 * r24558285;
        double r24558287 = -8.166761891516301e+211;
        bool r24558288 = r24558286 <= r24558287;
        double r24558289 = b1;
        double r24558290 = r24558285 / r24558289;
        double r24558291 = b2;
        double r24558292 = r24558290 / r24558291;
        double r24558293 = r24558284 * r24558292;
        double r24558294 = -1.9012909414021198e-246;
        bool r24558295 = r24558286 <= r24558294;
        double r24558296 = cbrt(r24558291);
        double r24558297 = r24558296 * r24558296;
        double r24558298 = r24558286 / r24558297;
        double r24558299 = 1.0;
        double r24558300 = r24558299 / r24558289;
        double r24558301 = r24558300 / r24558296;
        double r24558302 = r24558298 * r24558301;
        double r24558303 = 2.0454448799638273e-197;
        bool r24558304 = r24558286 <= r24558303;
        double r24558305 = 4.068274320797992e+202;
        bool r24558306 = r24558286 <= r24558305;
        double r24558307 = r24558306 ? r24558302 : r24558293;
        double r24558308 = r24558304 ? r24558293 : r24558307;
        double r24558309 = r24558295 ? r24558302 : r24558308;
        double r24558310 = r24558288 ? r24558293 : r24558309;
        return r24558310;
}

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{\color{blue}{1 \cdot \frac{a1 \cdot a2}{b1}}}{b2}\]
    6. Applied associate-/l*20.8

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

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

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

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

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

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

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

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

      \[\leadsto a1 \cdot \color{blue}{\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 +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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