Average Error: 0.2 → 0.2
Time: 18.2s
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\]
\[\mathsf{fma}\left(4, \mathsf{fma}\left(a, \left(1 - a\right) \cdot a, \left(a + 3\right) \cdot \left(b \cdot b\right)\right), {\left(\mathsf{fma}\left(b, b, a \cdot a\right)\right)}^{2} - 1\right)\]
\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
\mathsf{fma}\left(4, \mathsf{fma}\left(a, \left(1 - a\right) \cdot a, \left(a + 3\right) \cdot \left(b \cdot b\right)\right), {\left(\mathsf{fma}\left(b, b, a \cdot a\right)\right)}^{2} - 1\right)
double f(double a, double b) {
        double r254027 = a;
        double r254028 = r254027 * r254027;
        double r254029 = b;
        double r254030 = r254029 * r254029;
        double r254031 = r254028 + r254030;
        double r254032 = 2.0;
        double r254033 = pow(r254031, r254032);
        double r254034 = 4.0;
        double r254035 = 1.0;
        double r254036 = r254035 - r254027;
        double r254037 = r254028 * r254036;
        double r254038 = 3.0;
        double r254039 = r254038 + r254027;
        double r254040 = r254030 * r254039;
        double r254041 = r254037 + r254040;
        double r254042 = r254034 * r254041;
        double r254043 = r254033 + r254042;
        double r254044 = r254043 - r254035;
        return r254044;
}

double f(double a, double b) {
        double r254045 = 4.0;
        double r254046 = a;
        double r254047 = 1.0;
        double r254048 = r254047 - r254046;
        double r254049 = r254048 * r254046;
        double r254050 = 3.0;
        double r254051 = r254046 + r254050;
        double r254052 = b;
        double r254053 = r254052 * r254052;
        double r254054 = r254051 * r254053;
        double r254055 = fma(r254046, r254049, r254054);
        double r254056 = r254046 * r254046;
        double r254057 = fma(r254052, r254052, r254056);
        double r254058 = 2.0;
        double r254059 = pow(r254057, r254058);
        double r254060 = r254059 - r254047;
        double r254061 = fma(r254045, r254055, r254060);
        return r254061;
}

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(4, \mathsf{fma}\left(a, \left(1 - a\right) \cdot a, \left(a + 3\right) \cdot \left(b \cdot b\right)\right), {\left(\mathsf{fma}\left(b, b, a \cdot a\right)\right)}^{2} - 1\right)}\]
  3. Final simplification0.2

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

Reproduce

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