Average Error: 0.2 → 0.2
Time: 33.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(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(\mathsf{fma}\left(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\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(1 - 3 \cdot a\right)\right)\right) - 1
\mathsf{fma}\left(\mathsf{fma}\left(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\right)
double f(double a, double b) {
        double r5569020 = a;
        double r5569021 = r5569020 * r5569020;
        double r5569022 = b;
        double r5569023 = r5569022 * r5569022;
        double r5569024 = r5569021 + r5569023;
        double r5569025 = 2.0;
        double r5569026 = pow(r5569024, r5569025);
        double r5569027 = 4.0;
        double r5569028 = 1.0;
        double r5569029 = r5569028 + r5569020;
        double r5569030 = r5569021 * r5569029;
        double r5569031 = 3.0;
        double r5569032 = r5569031 * r5569020;
        double r5569033 = r5569028 - r5569032;
        double r5569034 = r5569023 * r5569033;
        double r5569035 = r5569030 + r5569034;
        double r5569036 = r5569027 * r5569035;
        double r5569037 = r5569026 + r5569036;
        double r5569038 = r5569037 - r5569028;
        return r5569038;
}

double f(double a, double b) {
        double r5569039 = 4.0;
        double r5569040 = a;
        double r5569041 = fma(r5569039, r5569040, r5569039);
        double r5569042 = r5569040 * r5569040;
        double r5569043 = b;
        double r5569044 = r5569043 * r5569043;
        double r5569045 = -12.0;
        double r5569046 = fma(r5569040, r5569045, r5569039);
        double r5569047 = fma(r5569040, r5569040, r5569044);
        double r5569048 = -1.0;
        double r5569049 = fma(r5569047, r5569047, r5569048);
        double r5569050 = fma(r5569044, r5569046, r5569049);
        double r5569051 = fma(r5569041, r5569042, r5569050);
        return r5569051;
}

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

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

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

Reproduce

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