Average Error: 0.2 → 0.2
Time: 18.1s
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(3 + a\right)\right)\right) - 1\]
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\left(a + 3\right) \cdot \left(b \cdot b\right) + \left(a \cdot a\right) \cdot \left(1 - 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(3 + a\right)\right)\right) - 1
\left({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\left(a + 3\right) \cdot \left(b \cdot b\right) + \left(a \cdot a\right) \cdot \left(1 - a\right)\right) \cdot 4\right) - 1
double f(double a, double b) {
        double r3757024 = a;
        double r3757025 = r3757024 * r3757024;
        double r3757026 = b;
        double r3757027 = r3757026 * r3757026;
        double r3757028 = r3757025 + r3757027;
        double r3757029 = 2.0;
        double r3757030 = pow(r3757028, r3757029);
        double r3757031 = 4.0;
        double r3757032 = 1.0;
        double r3757033 = r3757032 - r3757024;
        double r3757034 = r3757025 * r3757033;
        double r3757035 = 3.0;
        double r3757036 = r3757035 + r3757024;
        double r3757037 = r3757027 * r3757036;
        double r3757038 = r3757034 + r3757037;
        double r3757039 = r3757031 * r3757038;
        double r3757040 = r3757030 + r3757039;
        double r3757041 = r3757040 - r3757032;
        return r3757041;
}

double f(double a, double b) {
        double r3757042 = a;
        double r3757043 = r3757042 * r3757042;
        double r3757044 = b;
        double r3757045 = r3757044 * r3757044;
        double r3757046 = r3757043 + r3757045;
        double r3757047 = 2.0;
        double r3757048 = pow(r3757046, r3757047);
        double r3757049 = 3.0;
        double r3757050 = r3757042 + r3757049;
        double r3757051 = r3757050 * r3757045;
        double r3757052 = 1.0;
        double r3757053 = r3757052 - r3757042;
        double r3757054 = r3757043 * r3757053;
        double r3757055 = r3757051 + r3757054;
        double r3757056 = 4.0;
        double r3757057 = r3757055 * r3757056;
        double r3757058 = r3757048 + r3757057;
        double r3757059 = r3757058 - r3757052;
        return r3757059;
}

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(3 + a\right)\right)\right) - 1\]
  2. Final simplification0.2

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

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))