Average Error: 0.2 → 0.2
Time: 44.7s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(\left(a \cdot a\right) \cdot \left(1.0 - a\right) + \left(b \cdot b\right) \cdot \left(3.0 + a\right)\right)\right) - 1.0\]
\[\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + \left(\frac{\left(1.0 \cdot 1.0 - a \cdot a\right) \cdot \left(a \cdot a\right)}{a + 1.0} + \left(3.0 + a\right) \cdot \left(b \cdot b\right)\right) \cdot 4.0\right) - 1.0\]
\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(\left(a \cdot a\right) \cdot \left(1.0 - a\right) + \left(b \cdot b\right) \cdot \left(3.0 + a\right)\right)\right) - 1.0
\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + \left(\frac{\left(1.0 \cdot 1.0 - a \cdot a\right) \cdot \left(a \cdot a\right)}{a + 1.0} + \left(3.0 + a\right) \cdot \left(b \cdot b\right)\right) \cdot 4.0\right) - 1.0
double f(double a, double b) {
        double r6703235 = a;
        double r6703236 = r6703235 * r6703235;
        double r6703237 = b;
        double r6703238 = r6703237 * r6703237;
        double r6703239 = r6703236 + r6703238;
        double r6703240 = 2.0;
        double r6703241 = pow(r6703239, r6703240);
        double r6703242 = 4.0;
        double r6703243 = 1.0;
        double r6703244 = r6703243 - r6703235;
        double r6703245 = r6703236 * r6703244;
        double r6703246 = 3.0;
        double r6703247 = r6703246 + r6703235;
        double r6703248 = r6703238 * r6703247;
        double r6703249 = r6703245 + r6703248;
        double r6703250 = r6703242 * r6703249;
        double r6703251 = r6703241 + r6703250;
        double r6703252 = r6703251 - r6703243;
        return r6703252;
}

double f(double a, double b) {
        double r6703253 = a;
        double r6703254 = r6703253 * r6703253;
        double r6703255 = b;
        double r6703256 = r6703255 * r6703255;
        double r6703257 = r6703254 + r6703256;
        double r6703258 = 2.0;
        double r6703259 = pow(r6703257, r6703258);
        double r6703260 = 1.0;
        double r6703261 = r6703260 * r6703260;
        double r6703262 = r6703261 - r6703254;
        double r6703263 = r6703262 * r6703254;
        double r6703264 = r6703253 + r6703260;
        double r6703265 = r6703263 / r6703264;
        double r6703266 = 3.0;
        double r6703267 = r6703266 + r6703253;
        double r6703268 = r6703267 * r6703256;
        double r6703269 = r6703265 + r6703268;
        double r6703270 = 4.0;
        double r6703271 = r6703269 * r6703270;
        double r6703272 = r6703259 + r6703271;
        double r6703273 = r6703272 - r6703260;
        return r6703273;
}

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.0} + 4.0 \cdot \left(\left(a \cdot a\right) \cdot \left(1.0 - a\right) + \left(b \cdot b\right) \cdot \left(3.0 + a\right)\right)\right) - 1.0\]
  2. Using strategy rm
  3. Applied flip--0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(\left(a \cdot a\right) \cdot \color{blue}{\frac{1.0 \cdot 1.0 - a \cdot a}{1.0 + a}} + \left(b \cdot b\right) \cdot \left(3.0 + a\right)\right)\right) - 1.0\]
  4. Applied associate-*r/0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(\color{blue}{\frac{\left(a \cdot a\right) \cdot \left(1.0 \cdot 1.0 - a \cdot a\right)}{1.0 + a}} + \left(b \cdot b\right) \cdot \left(3.0 + a\right)\right)\right) - 1.0\]
  5. Final simplification0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2.0} + \left(\frac{\left(1.0 \cdot 1.0 - a \cdot a\right) \cdot \left(a \cdot a\right)}{a + 1.0} + \left(3.0 + a\right) \cdot \left(b \cdot b\right)\right) \cdot 4.0\right) - 1.0\]

Reproduce

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