Average Error: 0.2 → 0.2
Time: 29.9s
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(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\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
\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r222204 = a;
        double r222205 = r222204 * r222204;
        double r222206 = b;
        double r222207 = r222206 * r222206;
        double r222208 = r222205 + r222207;
        double r222209 = 2.0;
        double r222210 = pow(r222208, r222209);
        double r222211 = 4.0;
        double r222212 = 1.0;
        double r222213 = r222212 - r222204;
        double r222214 = r222205 * r222213;
        double r222215 = 3.0;
        double r222216 = r222215 + r222204;
        double r222217 = r222207 * r222216;
        double r222218 = r222214 + r222217;
        double r222219 = r222211 * r222218;
        double r222220 = r222210 + r222219;
        double r222221 = r222220 - r222212;
        return r222221;
}

double f(double a, double b) {
        double r222222 = a;
        double r222223 = r222222 * r222222;
        double r222224 = 1.0;
        double r222225 = r222224 - r222222;
        double r222226 = b;
        double r222227 = r222226 * r222226;
        double r222228 = 3.0;
        double r222229 = r222228 + r222222;
        double r222230 = r222227 * r222229;
        double r222231 = fma(r222223, r222225, r222230);
        double r222232 = 4.0;
        double r222233 = fma(r222222, r222222, r222227);
        double r222234 = 2.0;
        double r222235 = pow(r222233, r222234);
        double r222236 = fma(r222231, r222232, r222235);
        double r222237 = r222236 - r222224;
        return r222237;
}

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(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1}\]
  3. Final simplification0.2

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

Reproduce

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