Average Error: 11.1 → 6.7
Time: 2.1s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -6.67328305695128662 \cdot 10^{298}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.9624359391974792 \cdot 10^{-63}:\\ \;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.4125112865997151 \cdot 10^{-110}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 9.89298998926045652 \cdot 10^{206}:\\ \;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -6.67328305695128662 \cdot 10^{298}:\\
\;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\

\mathbf{elif}\;a1 \cdot a2 \le -9.9624359391974792 \cdot 10^{-63}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 9.89298998926045652 \cdot 10^{206}:\\
\;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r227438 = a1;
        double r227439 = a2;
        double r227440 = r227438 * r227439;
        double r227441 = b1;
        double r227442 = b2;
        double r227443 = r227441 * r227442;
        double r227444 = r227440 / r227443;
        return r227444;
}

double f(double a1, double a2, double b1, double b2) {
        double r227445 = a1;
        double r227446 = a2;
        double r227447 = r227445 * r227446;
        double r227448 = -6.673283056951287e+298;
        bool r227449 = r227447 <= r227448;
        double r227450 = b1;
        double r227451 = b2;
        double r227452 = r227450 * r227451;
        double r227453 = r227452 / r227446;
        double r227454 = r227445 / r227453;
        double r227455 = -9.96243593919748e-63;
        bool r227456 = r227447 <= r227455;
        double r227457 = 1.0;
        double r227458 = r227457 / r227450;
        double r227459 = r227447 * r227458;
        double r227460 = r227459 / r227451;
        double r227461 = 6.412511286599715e-110;
        bool r227462 = r227447 <= r227461;
        double r227463 = r227445 / r227450;
        double r227464 = r227446 / r227451;
        double r227465 = r227463 * r227464;
        double r227466 = 9.892989989260457e+206;
        bool r227467 = r227447 <= r227466;
        double r227468 = r227464 / r227450;
        double r227469 = r227445 * r227468;
        double r227470 = r227467 ? r227460 : r227469;
        double r227471 = r227462 ? r227465 : r227470;
        double r227472 = r227456 ? r227460 : r227471;
        double r227473 = r227449 ? r227454 : r227472;
        return r227473;
}

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

Original11.1
Target11.5
Herbie6.7
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

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

    1. Initial program 60.1

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

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

    if -6.673283056951287e+298 < (* a1 a2) < -9.96243593919748e-63 or 6.412511286599715e-110 < (* a1 a2) < 9.892989989260457e+206

    1. Initial program 4.9

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

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

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

    if -9.96243593919748e-63 < (* a1 a2) < 6.412511286599715e-110

    1. Initial program 11.3

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

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

    if 9.892989989260457e+206 < (* a1 a2)

    1. Initial program 31.4

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

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -6.67328305695128662 \cdot 10^{298}:\\ \;\;\;\;\frac{a1}{\frac{b1 \cdot b2}{a2}}\\ \mathbf{elif}\;a1 \cdot a2 \le -9.9624359391974792 \cdot 10^{-63}:\\ \;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.4125112865997151 \cdot 10^{-110}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 9.89298998926045652 \cdot 10^{206}:\\ \;\;\;\;\frac{\left(a1 \cdot a2\right) \cdot \frac{1}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\ \end{array}\]

Reproduce

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

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

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