Average Error: 11.2 → 5.3
Time: 1.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.18542674190811771 \cdot 10^{246}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.34505063860751228 \cdot 10^{-269}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.8073479006144804 \cdot 10^{206}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{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 -3.18542674190811771 \cdot 10^{246}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\

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

\mathbf{elif}\;a1 \cdot a2 \le 0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r148367 = a1;
        double r148368 = a2;
        double r148369 = r148367 * r148368;
        double r148370 = b1;
        double r148371 = b2;
        double r148372 = r148370 * r148371;
        double r148373 = r148369 / r148372;
        return r148373;
}

double f(double a1, double a2, double b1, double b2) {
        double r148374 = a1;
        double r148375 = a2;
        double r148376 = r148374 * r148375;
        double r148377 = -3.1854267419081177e+246;
        bool r148378 = r148376 <= r148377;
        double r148379 = b2;
        double r148380 = r148375 / r148379;
        double r148381 = b1;
        double r148382 = r148380 / r148381;
        double r148383 = r148374 * r148382;
        double r148384 = -5.345050638607512e-269;
        bool r148385 = r148376 <= r148384;
        double r148386 = r148376 / r148381;
        double r148387 = r148386 / r148379;
        double r148388 = 0.0;
        bool r148389 = r148376 <= r148388;
        double r148390 = r148374 / r148381;
        double r148391 = r148390 * r148380;
        double r148392 = 2.8073479006144804e+206;
        bool r148393 = r148376 <= r148392;
        double r148394 = 1.0;
        double r148395 = r148394 / r148381;
        double r148396 = r148395 / r148379;
        double r148397 = r148376 * r148396;
        double r148398 = r148393 ? r148397 : r148391;
        double r148399 = r148389 ? r148391 : r148398;
        double r148400 = r148385 ? r148387 : r148399;
        double r148401 = r148378 ? r148383 : r148400;
        return r148401;
}

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

Derivation

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

    1. Initial program 44.4

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

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

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

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

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

    if -3.1854267419081177e+246 < (* a1 a2) < -5.345050638607512e-269

    1. Initial program 5.0

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

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

    if -5.345050638607512e-269 < (* a1 a2) < 0.0 or 2.8073479006144804e+206 < (* a1 a2)

    1. Initial program 24.0

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

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

    if 0.0 < (* a1 a2) < 2.8073479006144804e+206

    1. Initial program 5.5

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied div-inv5.8

      \[\leadsto \color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}}\]
    4. Using strategy rm
    5. Applied associate-/r*5.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -3.18542674190811771 \cdot 10^{246}:\\ \;\;\;\;a1 \cdot \frac{\frac{a2}{b2}}{b1}\\ \mathbf{elif}\;a1 \cdot a2 \le -5.34505063860751228 \cdot 10^{-269}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 0.0:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 2.8073479006144804 \cdot 10^{206}:\\ \;\;\;\;\left(a1 \cdot a2\right) \cdot \frac{\frac{1}{b1}}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \end{array}\]

Reproduce

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

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

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