Average Error: 10.8 → 5.0
Time: 4.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.604958784251808198840015507538373981042 \cdot 10^{191}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.354693224406461136834790790699340112959 \cdot 10^{-271}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.193005295802932340834729742793829018686 \cdot 10^{-316}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.515727156315485723303824540710871575854 \cdot 10^{273}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -4.604958784251808198840015507538373981042 \cdot 10^{191}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\

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

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

\mathbf{elif}\;a1 \cdot a2 \le 3.515727156315485723303824540710871575854 \cdot 10^{273}:\\
\;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r203262 = a1;
        double r203263 = a2;
        double r203264 = r203262 * r203263;
        double r203265 = b1;
        double r203266 = b2;
        double r203267 = r203265 * r203266;
        double r203268 = r203264 / r203267;
        return r203268;
}

double f(double a1, double a2, double b1, double b2) {
        double r203269 = a1;
        double r203270 = a2;
        double r203271 = r203269 * r203270;
        double r203272 = -4.604958784251808e+191;
        bool r203273 = r203271 <= r203272;
        double r203274 = b1;
        double r203275 = r203270 / r203274;
        double r203276 = b2;
        double r203277 = r203275 / r203276;
        double r203278 = r203269 * r203277;
        double r203279 = -2.3546932244064611e-271;
        bool r203280 = r203271 <= r203279;
        double r203281 = 1.0;
        double r203282 = r203281 / r203274;
        double r203283 = r203271 / r203276;
        double r203284 = r203282 * r203283;
        double r203285 = 4.1930052958029e-316;
        bool r203286 = r203271 <= r203285;
        double r203287 = cbrt(r203274);
        double r203288 = r203287 * r203287;
        double r203289 = r203269 / r203288;
        double r203290 = r203270 / r203287;
        double r203291 = r203290 / r203276;
        double r203292 = r203289 * r203291;
        double r203293 = 3.5157271563154857e+273;
        bool r203294 = r203271 <= r203293;
        double r203295 = r203269 / r203274;
        double r203296 = r203270 / r203276;
        double r203297 = r203295 * r203296;
        double r203298 = r203294 ? r203284 : r203297;
        double r203299 = r203286 ? r203292 : r203298;
        double r203300 = r203280 ? r203284 : r203299;
        double r203301 = r203273 ? r203278 : r203300;
        return r203301;
}

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

Derivation

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

    1. Initial program 32.1

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

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

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

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

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

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

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

    if -4.604958784251808e+191 < (* a1 a2) < -2.3546932244064611e-271 or 4.1930052958029e-316 < (* a1 a2) < 3.5157271563154857e+273

    1. Initial program 4.7

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

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

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

      \[\leadsto \frac{\frac{1}{\frac{b1}{a1 \cdot a2}}}{\color{blue}{1 \cdot b2}}\]
    8. Applied div-inv5.7

      \[\leadsto \frac{\frac{1}{\color{blue}{b1 \cdot \frac{1}{a1 \cdot a2}}}}{1 \cdot b2}\]
    9. Applied add-cube-cbrt5.7

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

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

      \[\leadsto \color{blue}{\frac{\frac{\sqrt[3]{1} \cdot \sqrt[3]{1}}{b1}}{1} \cdot \frac{\frac{\sqrt[3]{1}}{\frac{1}{a1 \cdot a2}}}{b2}}\]
    12. Simplified5.2

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

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

    if -2.3546932244064611e-271 < (* a1 a2) < 4.1930052958029e-316

    1. Initial program 18.5

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

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

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

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

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

      \[\leadsto \color{blue}{\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{1} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}}\]
    9. Simplified2.2

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

    if 3.5157271563154857e+273 < (* a1 a2)

    1. Initial program 52.1

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -4.604958784251808198840015507538373981042 \cdot 10^{191}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -2.354693224406461136834790790699340112959 \cdot 10^{-271}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 4.193005295802932340834729742793829018686 \cdot 10^{-316}:\\ \;\;\;\;\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.515727156315485723303824540710871575854 \cdot 10^{273}:\\ \;\;\;\;\frac{1}{b1} \cdot \frac{a1 \cdot a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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