Average Error: 11.1 → 11.1
Time: 4.9s
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 r90161 = a1;
        double r90162 = a2;
        double r90163 = r90161 * r90162;
        double r90164 = b1;
        double r90165 = b2;
        double r90166 = r90164 * r90165;
        double r90167 = r90163 / r90166;
        return r90167;
}

double f(double a1, double a2, double b1, double b2) {
        double r90168 = a1;
        double r90169 = a2;
        double r90170 = r90168 * r90169;
        double r90171 = b1;
        double r90172 = b2;
        double r90173 = r90171 * r90172;
        double r90174 = r90170 / r90173;
        return r90174;
}

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

Derivation

  1. Split input into 2 regimes
  2. if (/ (* a1 a2) (* b1 b2)) < -inf.0 or -8.150496738080393e-304 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 1.1733062016682887e+275 < (/ (* a1 a2) (* b1 b2))

    1. Initial program 31.0

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

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

    if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -8.150496738080393e-304 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 1.1733062016682887e+275

    1. Initial program 3.5

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification11.1

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

Reproduce

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

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

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