Average Error: 0.2 → 0.2
Time: 42.7s
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\]
\[\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, 4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right) + \left(a \cdot a\right) \cdot \left(a + 1\right)\right)\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
\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, 4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right) + \left(a \cdot a\right) \cdot \left(a + 1\right)\right)\right) - 1
double f(double a, double b) {
        double r4605955 = a;
        double r4605956 = r4605955 * r4605955;
        double r4605957 = b;
        double r4605958 = r4605957 * r4605957;
        double r4605959 = r4605956 + r4605958;
        double r4605960 = 2.0;
        double r4605961 = pow(r4605959, r4605960);
        double r4605962 = 4.0;
        double r4605963 = 1.0;
        double r4605964 = r4605963 + r4605955;
        double r4605965 = r4605956 * r4605964;
        double r4605966 = 3.0;
        double r4605967 = r4605966 * r4605955;
        double r4605968 = r4605963 - r4605967;
        double r4605969 = r4605958 * r4605968;
        double r4605970 = r4605965 + r4605969;
        double r4605971 = r4605962 * r4605970;
        double r4605972 = r4605961 + r4605971;
        double r4605973 = r4605972 - r4605963;
        return r4605973;
}

double f(double a, double b) {
        double r4605974 = a;
        double r4605975 = r4605974 * r4605974;
        double r4605976 = b;
        double r4605977 = r4605976 * r4605976;
        double r4605978 = r4605975 + r4605977;
        double r4605979 = 4.0;
        double r4605980 = 1.0;
        double r4605981 = 3.0;
        double r4605982 = r4605981 * r4605974;
        double r4605983 = r4605980 - r4605982;
        double r4605984 = r4605977 * r4605983;
        double r4605985 = r4605974 + r4605980;
        double r4605986 = r4605975 * r4605985;
        double r4605987 = r4605984 + r4605986;
        double r4605988 = r4605979 * r4605987;
        double r4605989 = fma(r4605978, r4605978, r4605988);
        double r4605990 = r4605989 - r4605980;
        return r4605990;
}

Error

Bits error versus a

Bits error versus b

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 unpow20.2

    \[\leadsto \left(\color{blue}{\left(a \cdot a + b \cdot b\right) \cdot \left(a \cdot a + b \cdot b\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) - 1\]
  4. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, 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\]
  5. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(a \cdot a + b \cdot b, a \cdot a + b \cdot b, 4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right) + \left(a \cdot a\right) \cdot \left(a + 1\right)\right)\right) - 1\]

Reproduce

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