Average Error: 0.2 → 0.2
Time: 20.8s
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({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\left(a \cdot a\right) \cdot \left(a + 1\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right) \cdot 4\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({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\left(a \cdot a\right) \cdot \left(a + 1\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right) \cdot 4\right) - 1
double f(double a, double b) {
        double r86528 = a;
        double r86529 = r86528 * r86528;
        double r86530 = b;
        double r86531 = r86530 * r86530;
        double r86532 = r86529 + r86531;
        double r86533 = 2.0;
        double r86534 = pow(r86532, r86533);
        double r86535 = 4.0;
        double r86536 = 1.0;
        double r86537 = r86536 + r86528;
        double r86538 = r86529 * r86537;
        double r86539 = 3.0;
        double r86540 = r86539 * r86528;
        double r86541 = r86536 - r86540;
        double r86542 = r86531 * r86541;
        double r86543 = r86538 + r86542;
        double r86544 = r86535 * r86543;
        double r86545 = r86534 + r86544;
        double r86546 = r86545 - r86536;
        return r86546;
}

double f(double a, double b) {
        double r86547 = a;
        double r86548 = r86547 * r86547;
        double r86549 = b;
        double r86550 = r86549 * r86549;
        double r86551 = r86548 + r86550;
        double r86552 = 2.0;
        double r86553 = pow(r86551, r86552);
        double r86554 = 1.0;
        double r86555 = r86547 + r86554;
        double r86556 = r86548 * r86555;
        double r86557 = 3.0;
        double r86558 = r86557 * r86547;
        double r86559 = r86554 - r86558;
        double r86560 = r86550 * r86559;
        double r86561 = r86556 + r86560;
        double r86562 = 4.0;
        double r86563 = r86561 * r86562;
        double r86564 = r86553 + r86563;
        double r86565 = r86564 - r86554;
        return r86565;
}

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. Final simplification0.2

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

Reproduce

herbie shell --seed 2019194 +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))