Average Error: 11.8 → 11.8
Time: 11.4s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\frac{a1 \cdot a2}{b1 \cdot b2}
double f(double a1, double a2, double b1, double b2) {
        double r82060 = a1;
        double r82061 = a2;
        double r82062 = r82060 * r82061;
        double r82063 = b1;
        double r82064 = b2;
        double r82065 = r82063 * r82064;
        double r82066 = r82062 / r82065;
        return r82066;
}

double f(double a1, double a2, double b1, double b2) {
        double r82067 = a1;
        double r82068 = a2;
        double r82069 = r82067 * r82068;
        double r82070 = b1;
        double r82071 = b2;
        double r82072 = r82070 * r82071;
        double r82073 = r82069 / r82072;
        return r82073;
}

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

Derivation

  1. Split input into 4 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -inf.0

    1. Initial program 64.0

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -6.7041547108655e-315 or -0.0 < (/ (* a1 a2) (* b1 b2)) < 3.552403781503261e+307

    1. Initial program 3.6

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]

    if -6.7041547108655e-315 < (/ (* a1 a2) (* b1 b2)) < -0.0

    1. Initial program 14.6

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

      \[\leadsto \color{blue}{\frac{a1}{b1} \cdot \frac{a2}{b2}}\]
    4. Using strategy rm
    5. Applied associate-*l/3.9

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

    if 3.552403781503261e+307 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 63.7

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

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

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

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

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

Reproduce

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

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

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