Average Error: 0.2 → 0.2
Time: 23.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(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 r222323 = a;
        double r222324 = r222323 * r222323;
        double r222325 = b;
        double r222326 = r222325 * r222325;
        double r222327 = r222324 + r222326;
        double r222328 = 2.0;
        double r222329 = pow(r222327, r222328);
        double r222330 = 4.0;
        double r222331 = 1.0;
        double r222332 = r222331 - r222323;
        double r222333 = r222324 * r222332;
        double r222334 = 3.0;
        double r222335 = r222334 + r222323;
        double r222336 = r222326 * r222335;
        double r222337 = r222333 + r222336;
        double r222338 = r222330 * r222337;
        double r222339 = r222329 + r222338;
        double r222340 = r222339 - r222331;
        return r222340;
}

double f(double a, double b) {
        double r222341 = a;
        double r222342 = r222341 * r222341;
        double r222343 = 1.0;
        double r222344 = r222343 - r222341;
        double r222345 = b;
        double r222346 = r222345 * r222345;
        double r222347 = 3.0;
        double r222348 = r222347 + r222341;
        double r222349 = r222346 * r222348;
        double r222350 = fma(r222342, r222344, r222349);
        double r222351 = 4.0;
        double r222352 = fma(r222341, r222341, r222346);
        double r222353 = 2.0;
        double r222354 = pow(r222352, r222353);
        double r222355 = fma(r222350, r222351, r222354);
        double r222356 = r222355 - r222343;
        return r222356;
}

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 2019303 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))