\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(\mathsf{hypot}\left(a, b\right)\right)}^{\left(2 + 2\right)} + 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) - 1double f(double a, double b) {
double r187039 = a;
double r187040 = r187039 * r187039;
double r187041 = b;
double r187042 = r187041 * r187041;
double r187043 = r187040 + r187042;
double r187044 = 2.0;
double r187045 = pow(r187043, r187044);
double r187046 = 4.0;
double r187047 = 1.0;
double r187048 = r187047 + r187039;
double r187049 = r187040 * r187048;
double r187050 = 3.0;
double r187051 = r187050 * r187039;
double r187052 = r187047 - r187051;
double r187053 = r187042 * r187052;
double r187054 = r187049 + r187053;
double r187055 = r187046 * r187054;
double r187056 = r187045 + r187055;
double r187057 = r187056 - r187047;
return r187057;
}
double f(double a, double b) {
double r187058 = a;
double r187059 = b;
double r187060 = hypot(r187058, r187059);
double r187061 = 2.0;
double r187062 = r187061 + r187061;
double r187063 = pow(r187060, r187062);
double r187064 = 4.0;
double r187065 = r187058 * r187058;
double r187066 = 1.0;
double r187067 = r187066 + r187058;
double r187068 = r187065 * r187067;
double r187069 = r187059 * r187059;
double r187070 = 3.0;
double r187071 = r187070 * r187058;
double r187072 = r187066 - r187071;
double r187073 = r187069 * r187072;
double r187074 = r187068 + r187073;
double r187075 = r187064 * r187074;
double r187076 = r187063 + r187075;
double r187077 = r187076 - r187066;
return r187077;
}



Bits error versus a



Bits error versus b
Results
Initial program 0.2
rmApplied add-sqr-sqrt0.2
Applied unpow-prod-down0.2
Simplified0.2
Simplified0.2
rmApplied pow-prod-up0.0
Final simplification0.0
herbie shell --seed 2020034 +o rules:numerics
(FPCore (a b)
:name "Bouland and Aaronson, Equation (25)"
:precision binary64
(- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))