Average Error: 10.8 → 5.6
Time: 17.7s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.1180214770221087 \cdot 10^{+115}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -6.76662796926326 \cdot 10^{-234}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 7.422955137579593 \cdot 10^{-199}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.395771950507316 \cdot 10^{+255}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \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 -2.1180214770221087 \cdot 10^{+115}:\\
\;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\

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

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

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r5362282 = a1;
        double r5362283 = a2;
        double r5362284 = r5362282 * r5362283;
        double r5362285 = b1;
        double r5362286 = b2;
        double r5362287 = r5362285 * r5362286;
        double r5362288 = r5362284 / r5362287;
        return r5362288;
}

double f(double a1, double a2, double b1, double b2) {
        double r5362289 = a1;
        double r5362290 = a2;
        double r5362291 = r5362289 * r5362290;
        double r5362292 = -2.1180214770221087e+115;
        bool r5362293 = r5362291 <= r5362292;
        double r5362294 = b1;
        double r5362295 = r5362294 / r5362289;
        double r5362296 = r5362290 / r5362295;
        double r5362297 = b2;
        double r5362298 = r5362296 / r5362297;
        double r5362299 = -6.76662796926326e-234;
        bool r5362300 = r5362291 <= r5362299;
        double r5362301 = r5362297 * r5362294;
        double r5362302 = r5362291 / r5362301;
        double r5362303 = 7.422955137579593e-199;
        bool r5362304 = r5362291 <= r5362303;
        double r5362305 = r5362289 / r5362294;
        double r5362306 = r5362290 / r5362297;
        double r5362307 = r5362305 * r5362306;
        double r5362308 = 6.395771950507316e+255;
        bool r5362309 = r5362291 <= r5362308;
        double r5362310 = r5362309 ? r5362302 : r5362307;
        double r5362311 = r5362304 ? r5362307 : r5362310;
        double r5362312 = r5362300 ? r5362302 : r5362311;
        double r5362313 = r5362293 ? r5362298 : r5362312;
        return r5362313;
}

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

Derivation

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

    1. Initial program 23.4

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

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

      \[\leadsto \frac{\frac{a1 \cdot a2}{b1}}{\color{blue}{1 \cdot b2}}\]
    6. Applied associate-/r*23.2

      \[\leadsto \color{blue}{\frac{\frac{\frac{a1 \cdot a2}{b1}}{1}}{b2}}\]
    7. Simplified16.6

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

    if -2.1180214770221087e+115 < (* a1 a2) < -6.76662796926326e-234 or 7.422955137579593e-199 < (* a1 a2) < 6.395771950507316e+255

    1. Initial program 4.1

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

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

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

      \[\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-frac9.7

      \[\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-frac12.8

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

      \[\leadsto \color{blue}{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{b2}\]
    10. Taylor expanded around inf 4.1

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

    if -6.76662796926326e-234 < (* a1 a2) < 7.422955137579593e-199 or 6.395771950507316e+255 < (* a1 a2)

    1. Initial program 19.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -2.1180214770221087 \cdot 10^{+115}:\\ \;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -6.76662796926326 \cdot 10^{-234}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{elif}\;a1 \cdot a2 \le 7.422955137579593 \cdot 10^{-199}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.395771950507316 \cdot 10^{+255}:\\ \;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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