Average Error: 0.2 → 0.2
Time: 25.4s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\left(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right) + \frac{\left(1 \cdot 1 - a \cdot a\right) \cdot \left(a \cdot a\right)}{1 - a}\right) + {\left(a \cdot a + b \cdot b\right)}^{2}\right) - 1\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
\left(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right) + \frac{\left(1 \cdot 1 - a \cdot a\right) \cdot \left(a \cdot a\right)}{1 - a}\right) + {\left(a \cdot a + b \cdot b\right)}^{2}\right) - 1
double f(double a, double b) {
        double r6021511 = a;
        double r6021512 = r6021511 * r6021511;
        double r6021513 = b;
        double r6021514 = r6021513 * r6021513;
        double r6021515 = r6021512 + r6021514;
        double r6021516 = 2.0;
        double r6021517 = pow(r6021515, r6021516);
        double r6021518 = 4.0;
        double r6021519 = 1.0;
        double r6021520 = r6021519 + r6021511;
        double r6021521 = r6021512 * r6021520;
        double r6021522 = 3.0;
        double r6021523 = r6021522 * r6021511;
        double r6021524 = r6021519 - r6021523;
        double r6021525 = r6021514 * r6021524;
        double r6021526 = r6021521 + r6021525;
        double r6021527 = r6021518 * r6021526;
        double r6021528 = r6021517 + r6021527;
        double r6021529 = r6021528 - r6021519;
        return r6021529;
}

double f(double a, double b) {
        double r6021530 = 4.0;
        double r6021531 = b;
        double r6021532 = r6021531 * r6021531;
        double r6021533 = 1.0;
        double r6021534 = a;
        double r6021535 = 3.0;
        double r6021536 = r6021534 * r6021535;
        double r6021537 = r6021533 - r6021536;
        double r6021538 = r6021532 * r6021537;
        double r6021539 = r6021533 * r6021533;
        double r6021540 = r6021534 * r6021534;
        double r6021541 = r6021539 - r6021540;
        double r6021542 = r6021541 * r6021540;
        double r6021543 = r6021533 - r6021534;
        double r6021544 = r6021542 / r6021543;
        double r6021545 = r6021538 + r6021544;
        double r6021546 = r6021530 * r6021545;
        double r6021547 = r6021540 + r6021532;
        double r6021548 = 2.0;
        double r6021549 = pow(r6021547, r6021548);
        double r6021550 = r6021546 + r6021549;
        double r6021551 = r6021550 - r6021533;
        return r6021551;
}

Error

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.2

    \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied flip-+0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \color{blue}{\frac{1 \cdot 1 - a \cdot a}{1 - a}} + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  4. Applied associate-*r/0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\color{blue}{\frac{\left(a \cdot a\right) \cdot \left(1 \cdot 1 - a \cdot a\right)}{1 - a}} + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  5. Final simplification0.2

    \[\leadsto \left(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right) + \frac{\left(1 \cdot 1 - a \cdot a\right) \cdot \left(a \cdot a\right)}{1 - a}\right) + {\left(a \cdot a + b \cdot b\right)}^{2}\right) - 1\]

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 3.0 a)))))) 1.0))