Average Error: 0.2 → 0.2
Time: 34.1s
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(4, \mathsf{fma}\left(b, \mathsf{fma}\left(a \cdot b, -3, b\right), \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(b, b, a \cdot a\right), \mathsf{fma}\left(b, b, a \cdot a\right), -1\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(4, \mathsf{fma}\left(b, \mathsf{fma}\left(a \cdot b, -3, b\right), \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(b, b, a \cdot a\right), \mathsf{fma}\left(b, b, a \cdot a\right), -1\right)\right)
double f(double a, double b) {
        double r6436493 = a;
        double r6436494 = r6436493 * r6436493;
        double r6436495 = b;
        double r6436496 = r6436495 * r6436495;
        double r6436497 = r6436494 + r6436496;
        double r6436498 = 2.0;
        double r6436499 = pow(r6436497, r6436498);
        double r6436500 = 4.0;
        double r6436501 = 1.0;
        double r6436502 = r6436501 + r6436493;
        double r6436503 = r6436494 * r6436502;
        double r6436504 = 3.0;
        double r6436505 = r6436504 * r6436493;
        double r6436506 = r6436501 - r6436505;
        double r6436507 = r6436496 * r6436506;
        double r6436508 = r6436503 + r6436507;
        double r6436509 = r6436500 * r6436508;
        double r6436510 = r6436499 + r6436509;
        double r6436511 = r6436510 - r6436501;
        return r6436511;
}

double f(double a, double b) {
        double r6436512 = 4.0;
        double r6436513 = b;
        double r6436514 = a;
        double r6436515 = r6436514 * r6436513;
        double r6436516 = -3.0;
        double r6436517 = fma(r6436515, r6436516, r6436513);
        double r6436518 = r6436514 * r6436514;
        double r6436519 = fma(r6436518, r6436514, r6436518);
        double r6436520 = fma(r6436513, r6436517, r6436519);
        double r6436521 = fma(r6436513, r6436513, r6436518);
        double r6436522 = -1.0;
        double r6436523 = fma(r6436521, r6436521, r6436522);
        double r6436524 = fma(r6436512, r6436520, r6436523);
        return r6436524;
}

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

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

Reproduce

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